奇怪的JSONP语法错误

时间:2014-08-27 01:23:03

标签: javascript jquery ajax json jsonp

我坚持这个奇怪的语法错误指向第一个键中的冒号:json返回的值对。 JSONLint.com说json是有效的。有人可以帮忙吗? JSFiddle链接如下。感谢

http://jsfiddle.net/gbkester/hgt8bvb8/

$(document).ready(function() {
    $.ajax({
        type: "GET",
        url: "http://forecast.weather.gov/MapClick.php?lat=38.14000&lon=-78.45000&FcstType=digitalJSON",
        dataType: 'jsonp',
        success: function (json) {
            console.log(json)
        }
    })
})

2 个答案:

答案 0 :(得分:1)

在我看来,这个响应实际上并不是JSONP。它看起来像直JSON。

通常,JSONP端点接受callback= URL参数。此参数的值用于命名包装实际对象的函数。所以,例如:

http://example.com/api/endpoint?callback=foobar

会返回类似的内容:

foobar({"key":"value"});

你可以在小提琴中看到jQuery尝试这个:

http://forecast.weather.gov/MapClick.php?...&callback=jQuery11100967190676368773_1409103826888&_=1409103826889

callback=正在命名要返回的函数,_=是缓存清除的尝试。它希望看到一个看起来像的响应:

jQuery11100967190676368773_1409103826888({ ... });

添加或删除此参数似乎不会更改响应内容。如果没有API文档,它们可能会使用不同的参数。例如,如果他们使用bazquux作为参数,您可以将请求更改为:

$.ajax({
    ...
    url: "http://forecast.weather.gov/MapClick.php?lat=38.14000&lon=-78.45000&FcstType=digitalJSON&bazquux=?",
    ...
})

请注意文字&bazquux=?

答案 1 :(得分:0)

你缺少分号:

  1. 在console.log(json)之后
  2. 在ajax区块的关闭圆括号之后
  3. 在'ready'功能
  4. 的结束圆括号之后