似乎没有收到getJSON的响应

时间:2013-03-23 22:24:47

标签: javascript json node.js jsonp

我发送jsonp请求为:

var jsoncallback = "?jsoncallback=?"
$.getJSON( reportURL + jsoncallback, {
    tags: "",
    tagmode: "any",
    format: "json"
    })
    .done(function( data ) {
        $.each( data.items, function( i, item ) {
          alert( item );
        });
    });

我已发出提醒以查看请求是否有效。在服务器端,在节点js文件中,我响应请求为:

..
console.log("request received");
response.writeHead( 200, { "Content-Type": "application/json" } );
..
response.end();

在日志中我可以看到收到的请求。问题是没有弹出警报窗口。

这可能是什么原因?

2 个答案:

答案 0 :(得分:1)

  

我只是reponse.writeHead(...)和(出于测试原因 - 只是头部和结尾)response.end()

使用URL中的jsoncallback=?,jQuery期望JSONP <script>作为响应。为此,服务器应至少写出“ padding 。”

这是对jsoncallback命名的函数的调用。它不仅仅是? - jQuery用jQuery1910123456789_0123456789的伪随机函数名替换它。为此,响应至少应该是:

jQuery1910123456789_0123456789();

您需要从request.url

中获取值
var parsedUrl = url.parse(request.url, true);
var query = parsedUrl.query || {};

if ('jsoncallback' in query) {
    response.write(query.jsoncallback + '();');
}
// ...

并且,一旦你有data输出它:

if ('jsoncallback' in query) {
    response.write(query.jsoncallback + '(' + JSON.stringify(data) + ');');
} else {
    response.write(JSON.stringify(data));
}

答案 1 :(得分:0)

您确认JSON格式正确吗?请查看http://jsonlint.com/

来自getJSON() docs

  

从jQuery 1.4开始,如果JSON文件包含语法错误,那么   请求通常会无声地失败。