似乎在 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 上没有收到任何响应的主要内容,如果未能解决你的问题,请参考以下文章