jQuery AJAX 200状态,但神秘的语法错误

时间:2012-12-13 18:23:39

标签: javascript php jquery ajax json

当我使用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);

然而我明白了:

error screenshot

奇怪的是,如果我将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}}}} ';
一切正常。这个错误是什么?错误中出现的<哪里可以来自哪里?

由于

3 个答案:

答案 0 :(得分:4)

你的错误处理程序被触发并记录:

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

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

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

答案 1 :(得分:3)

200 - 服务器http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

是否正常回复

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

由于你的PHP代码接缝很好,所以必须有别的东西。语法错误或您的框架返回包含在html中的json ...

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

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

看起来你使用的是chrome。转到chrome中的“网络”标签,您应该可以看到针对您的请求的原始回复。

所以这是一个php错误:

$sector_index无法忍受。你可以var_dump看看。它是什么?

答案 2 :(得分:-2)

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