【问题标题】:Seems that no response received on getJSON似乎在 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")

标签: javascript json node.js jsonp


【解决方案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 ,我仍然没有弹出任何警报。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2021-03-01
    相关资源
    最近更新 更多