无法显示到控制台收到的JSON

时间:2014-05-08 12:46:55

标签: 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函数返回undefined。 感谢

1 个答案:

答案 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生成一个名称。手动几乎没有任何理由。

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

您没有在任何地方指定您想要对响应做什么。据推测,您将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标头。

然后使用:

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