0

我将 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();

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

这可能是什么原因?

4

2 回答 2

1

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

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

这是对名为的函数的调用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));
}
于 2013-03-23T23:19:40.193 回答
0

您是否确认 JSON 格式正确?对照http://jsonlint.com/检查它。

getJSON() 文档

从 jQuery 1.4 开始,如果 JSON 文件包含语法错误,请求通常会静默失败。

于 2013-03-23T22:34:20.857 回答