javascript - 无法向控制台显示收到的 JSON

标签 javascript jquery ajax json

我正在尝试从远程服务器接收包含 JSON 对象的大型数组。服务器端基于Node.js + redis。我的ajax查询:

$.ajax({
    crossDomain: true,
    type:"GET",
    contentType: "application/json",
    url: "http://****.amazonaws.com:8080/?userlist=1",
    dataType: "jsonp",
    jsonp: false,
    cache: true,
    jsonpCallback: function(data){console.log(data)}
});

在“网络”->“响应”选项卡上,我看到了数组,这是我想要接收的内容。示例:

[
    {
        "uid": 1,
        "username": "jf",
        "firstname": "Annunn",
        "lastname": "Uv",
        "photolink": "https://newsz.s3.amazonaws.com/users/male.jpg",
        "bubblecolor": 7,
        "chattscore": 125,
        "city": "Regina",
        "country": "CA",
        "locale": "CA",
        "refreshtime": 5
    },
    {
        "uid": 2,
        "username": "ypfoub",
        "firstname": "Gljissash",
        "lastname": "Braud",
        "photolink": "https://newsz.s3.amazonaws.com/users/female.jpg",
        "bubblecolor": 2,
        "chattscore": 125,
        "city": "Salt Lake City",
        "country": "US",
        "locale": "US",
        "refreshtime": 5
    }
]

但我无法对这个响应做任何事情。 jsonpCallback 函数返回未定义。 谢谢

最佳答案

你对 ajax 调用的一半参数在任何情况下都没有意义,剩下的一半在这种情况下也没有意义。

crossDomain: true,

仅当您向同一来源发出请求但被重定向到不同来源时,才应使用此选项。不要这样做。

type:"GET",

这很好。

contentType: "application/json",

您正在发出 GET 请求。请求中没有内容。不要指定内容类型。

url: "http://****.amazonaws.com:8080/?userlist=1",

这对于普通请求来说没问题,但如果您要使用 JSONP,那么您应该向其中添加 &callback=?

dataType: "jsonp",

您收到的响应不是 JSONP。你为什么告诉 jQuery 期待 JSONP?

jsonp: false,

除非您使用非标准回调名称查询字符串参数发出 JSONP 请求,否则请删除此项。如果您正在这样做,那么这应该是一个字符串,而不是 bool 值。

cache: true,

这很好。

jsonpCallback: function(data){console.log(data)}

如果您使用 JSONP,则让 jQuery 生成一个名称。几乎没有任何理由需要手动执行此操作。

如果您确实想要覆盖名称生成,则必须指定字符串或返回字符串的函数。这两者都不是。

您尚未在任何地方指定您想要对响应执行的操作。想必您将 jsonpCallbacksuccess 混淆了。


你需要做什么:

确定您使用的是 JSON 还是 JSONP。

如果您使用 JSONP,请更改您发出请求的服务器端脚本,以便它返回 JSONP 响应。

然后使用:

$.ajax({
    type:"GET",
    url: "http://****.amazonaws.com:8080/?userlist=1&callback=?",
    dataType: "jsonp",
    success: function(data){console.log(data)}
});

如果您没有使用 JSONP,那么(如果您还没有)更改服务器端脚本,使其包含 CORS header 。

然后使用:

$.ajax({
    type:"GET",
    url: "http://****.amazonaws.com:8080/?userlist=1",
    dataType: "json",
    success: function(data){console.log(data)}
});

关于javascript - 无法向控制台显示收到的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23542185/

相关文章:

javascript - 当用户关闭 IE 时显示一个消息框

javascript - 使用 Knockout AfterRender,但在子(迭代)元素而不是父元素上

jquery - 根据点击位置重新定位 div

php - 根据下拉列表选择从数据库填充另一个选择下拉列表

javascript - 如何更新 colorbox 中的基础数据?

javascript - 使用javascript将彩色图像转换为黑白图像

javascript - 通过表单提交图像和文本以及进度条

javascript - 将 JSON 对象的字段转换为标题大小写

jquery - IE7-Ajax 成功数据已过时

javascript - 将编码后的 php json 传递给 javascript