我正在尝试从远程服务器接收带有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函数返回undefined。 感谢
答案 0 :(得分:3)
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请求,否则请删除此选项。如果你 这样做,那么这应该是一个字符串,而不是一个布尔值。
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标头。
然后使用:
$.ajax({
type:"GET",
url: "http://****.amazonaws.com:8080/?userlist=1",
dataType: "json",
success: function(data){console.log(data)}
});