3

我在使用 jQuery AJAX 时返回了状态 200。但是,我也从某个地方收到语法错误。我像这样发布到 PHP:

function submit_order(orderInformation) {
    $.ajax({
        type: 'post',
        url: 'queries/submit_order.php?<?=time();?>',
        data: 'orderInformation=' + JSON.stringify(orderInformation),
        dataType: 'json',
        success: function (returnedData) {
            console.log(returnedData);
            $('#content_container').fadeOut(340, function () {
                var new_content = $('#content_container').clone(false);
                $('#content_container').remove();
                new_content.css('display', 'none');
                new_content.children().remove();

                new_content.appendTo('body');
                $('#content_container').vkTemplate('templates/confirm_template.tmpl?<?=time()?>', returnedData, function (el, data, context) {
                console.log('success'); 

                    $('#content_container').fadeIn(340);
                });
            });
        },
      error: function (xhr, ajaxOptions, thrownError) {
        console.log(xhr.status);
        console.log(thrownError);
      }
    });
}

我的 PHP 代码非常简单:

$order_information = json_decode($json_str, true);

//go through the array and make an email out of it
//add a few elements to the array
//send the email

//send back a json string with the added elements
echo json_encode($order_information);

然而我明白了:

错误截图

奇怪的是,如果我将 JSON 字符串复制粘贴console.log(JSON.stringify(orderInformation))到 PHP 页面中:

$json_str = '{"sector_0":{"file":[],"sector_info":{"sector_label":"NIO","purchase_order":"test","proof":false},"lines":{"line_0":{"description":"test","quantity":"2","productId":"1","addressId":"20","shipViaId":"1","notes":false}}}} ';

一切正常。这是什么错误?在错误中看到的这<可能来自哪里?

谢谢

4

3 回答 3

4

触发并记录的是您的错误处理程序:

  • xhr.status (200)
  • throwedError(语法错误)

请注意,即使服务器返回但响应是无效的 JSON , $.ajaxwith也会触发错误处理程序。语法错误不在您的 JavaScript 代码中,而是在 JSON 中。确定来自哪里,并确保您的 PHP 脚本正在发送有效的 JSON。dataType: json200 OK<

提示:打开控制台,查看网络选项卡;所有 XHR 都与标题和正文一起记录在那里。

于 2012-12-13T18:46:51.253 回答
3

200 - 是服务器的 Ok 响应http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

您的响应服务器中有语法错误返回无效的 json

由于您的 PHP 代码接缝良好,因此肯定还有其他内容。语法错误或您的框架返回包装在 html 中的 json ...

使用适当的工具查看服务器返回的内容。(firefox 上的 firebug/chrome 上的开发者工具)

在您的图像中,您看到0: "<"这意味着返回的字符串以<- 开头,这意味着它是返回的 html。

看起来你使用铬。转到 chrome 中的“网络”选项卡,您应该能够看到对您的请求的原始响应。

所以这是一个php错误:

$sector_index 是不可迭代的。你能不能 var_dump 看看。这是什么?

于 2012-12-13T18:32:37.353 回答
-2

看起来<?=time()?>没有得到处理。在发布到 URL 以进行验证之前,请提醒 URL。

于 2012-12-13T18:36:42.850 回答