7

我有以下ajax请求:

        jQuery.ajax({
            async: true,
            type: "GET",
            url: url,
            data: data,
            dataType: "json",
            success: function(results){
                currentData = results;
            },
            error: function(xhr, ajaxOptions, thrownError){
                if (xhr.status == 200) {
                    console.debug("Error code 200");
                }
                else {
                    currentData = {};
                    displayAjaxError(xhr.status);
                }
            }
        });

由于某种原因,错误回调被称为事件,尽管 http 状态代码是 200 即。请求没问题。为什么是这样?

4

3 回答 3

10

问题可能是从 url 返回的 json 数据格式错误。当服务器实际返回某些东西时,http 状态码是 200。但这并不意味着数据是正确的 json。检查返回的字符串化 json 数据格式是否正确。

我正在回答我自己的猜测,因为我很难学到这一点。我没有在我的 json 数据中转义“-quote 字符。这导致了非常奇怪的行为。幸运的是,双引号字符几乎是唯一需要从通过 JSON 传递的数据中转义的字符。(有关此问题的更多信息:我在哪里可以找到我的 JSON ajax 返回类型所需的转义字符列表?

于 2009-12-04T10:24:35.640 回答
1

您的回调是否返回带有 的页面Content-type: application/json?如果不是,那很可能是原因。

于 2009-12-04T10:24:21.443 回答
0

我使用 file: urls 而不是使用 Web 服务器进行了大量测试。我的 JSON 代码总是有错误的 MIME 类型。为了解决这个问题,我使用以下代码:

$(document).ready(
    function (){

        myData = {};
        $.ajax({
            type: "GET",
            // url: "json.php?fn=jsonData.json",        // with Apache
            url: "jsonData.json",                       // As a file:/// URL
            contentType: "application/json; charset=utf-8",
            data: myData,
            beforeSend: function(x) {
                if(x && x.overrideMimeType) {
                    x.overrideMimeType("application/json; charset=UTF-8");
                }
            },
            dataType: "json",

            success: function(returnData){
                 $("#jsonData").html("Success:"+returnData.tag);
            },
            error: function(returnData) {
                 $("#jsonData").html("Error:"+returnData.tag);
            }
        });
    }
);

这将强制 MIME 类型对于 JSON 数据是正确的。

于 2009-12-10T06:14:25.383 回答