似乎在 getJSON 上没有收到任何响应

Posted

技术标签:

【中文标题】似乎在 getJSON 上没有收到任何响应【英文标题】:Seems that no response received on getJSON 【发布时间】:2013-03-13 15:13:52 【问题描述】:

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

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

这可能是什么原因?

【问题讨论】:

您查看过浏览器的控制台日志吗? 当然。那里没有错误。 您的警报在每个方法中。也许迭代不正确?数据格式正确吗? 我从 each 移出警报 - 仍然没有 当你移动它时,你有没有调用 alert(item) ?因为那也不会失败。尝试每个方法 alert("test") 【参考方案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));

【讨论】:

【参考方案2】:

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

来自getJSON() docs:

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

【讨论】:

如果我在服务器端只留下 .writeHead 和 .end ,我仍然没有弹出任何警报。

以上是关于似乎在 getJSON 上没有收到任何响应的主要内容,如果未能解决你的问题,请参考以下文章

getJSON 只响应明文,否则不能工作?

使用 $.each 和 if 与 $.getJSON

尽管成功,$.getJSON 没有返回任何内容

SnowSql 无响应

$.getJSON 在 IE8 中返回缓存数据

$ .getJSON,回调不运行