Ajax调用抛出解析错误

时间:2013-01-15 03:24:21

标签: json jquery cross-domain jsonp parse-error

尝试执行以下调用时出现解析错误:

       $.ajax({
        cache: true,
        url: "http://localhost:3000/app/test/result1",
        data: "{}",
        type: "GET",
        jsonpCallback: "testCall",
        contentType: "application/jsonp; charset=utf-8",
        dataType: "jsonp",
        error: function (xhr, status, error) {
            alert(error);
        },
        success: function (result) {
            alert(result);
        },
        complete: function (request, textStatus) {
            alert(request.responseText);
            alert(textStatus);
        }
    });               

如果我直接将请求网址粘贴到浏览器地址栏中,则返回的结果似乎是有效的JSON:

    {
      "name": "The Name",
      "description": "The Description"
    }

我正在使用IISnode,NodeJs&快递JS。我测试了两种情况:

    // NODE JS CODE

    var app = express(); 

    app.get('/app/test/result1', function (req, res) {
    res.send({ name: "The Name", description: "The Description" });
    });

    app.get('/app/test/result2', function (req, res) {
    res.send(JSON.stringify({ name: "The Name", description: "the Description" }));
    });

感谢任何建议,提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的dataType列为jsonp。但是,您对node.js的响应不是格式正确的JSON-P响应。 JSON-P响应需要包含在回调中,如下所示:

testCall({ name: "The Name", description: "The Description" });

node.js代码看起来像这样:

res.send(
    'testCall(' + 
    JSON.stringify({ name: "The Name", description: "the Description" }) +
    ');'
);

(另请注意,您不需要data: "{}"行,因为请求是GET请求,并且不包含任何数据。它不应该伤害任何内容,但可能很好删除以避免混淆)。