我正在尝试从远程服务器接收包含 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 生成一个名称。几乎没有任何理由需要手动执行此操作。
如果您确实想要覆盖名称生成,则必须指定字符串或返回字符串的函数。这两者都不是。
您尚未在任何地方指定您想要对响应执行的操作。想必您将 jsonpCallback
与 success
混淆了。
你需要做什么:
确定您使用的是 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/