我正在通过以下方式向WeatherUnderground服务发出ajax请求:
$.ajax({
url : 'http://autocomplete.wunderground.com/aq?query=' + $input.val(),
type: 'GET',
dataType : "JSONP",
success : function(parsed_json) {
var obj = JSON.parse(parsed_json);
alert(typeof parsed_json);
for (var i = 0; i < obj.RESULTS.length; i++) {
suggestions[i] = obj.RESULTS[i].name;
}
},
error : function(parsed_json){
alert('Error');
}
});
但是当我得到回复时,我看到以下错误:
Uncaught SyntaxError:意外的令牌:
响应的第一行加下划线
{ "RESULTS": [
{
"name": "Dakar, Senegal",
"type": "city",
"c": "SN",
"zmw": "00000.1.61641",
"tz": "Africa/Dakar",
"tzs": "GMT",
"l": "/q/zmw:00000.1.61641",
"ll": "14.730000 -17.500000",
"lat": "14.730000",
"lon": "-17.500000"
}, ...
可能导致此问题的原因是什么?
提前谢谢!
答案 0 :(得分:0)
你正在使用JSONP意味着JSONP(带有填充的JSON)它与json不同。 有关详细信息,请参阅此链接。 链接:http://json-jsonp-tutorial.craic.com/index.html
客户端对JSONP的唯一更改是向URL添加回调参数。最简单的方法是添加'callback =?'在这种情况下,jQuery将生成一个唯一的函数名称并将其传递给服务器。
在服务器上,您需要获取'callback'参数,而不是返回原始JSON,而是将该字符串包装在函数定义中,例如“()”。您不需要事先知道函数名称 - 只需从该回调参数中获取它。
您还应该将内容类型设置为“application / javascript”,尽管这在我的测试中似乎并不重要。
回到客户端,您可以像返回原始JSON对象一样处理返回的函数。
`var url = host_prefix + '/jsonp?callback=?';
$.getJSON(url, function(jsonp){
$("#jsonp-response").html(JSON.stringify(jsonp, null, 2));
});
这会对你有所帮助。
答案 1 :(得分:0)
也可能值得注意的是,在wunderground API的情况下,它们提供了一个回调参数,因此您可以通过以下方式完全避免ajax ......
<body>
<input id="inp"/>
<input type="button" id="btn" value="Go!">
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script>
$("#btn").on("click",getDeets);
function getDeets(){
var str=$("#inp").val();
if(document.getElementById("myscr")){
document.body.removeChild(document.getElementById("myscr"));
}
var scr=document.createElement("script");
scr.id="myscr";
document.getElementById("myscr").src="http://autocomplete.wunderground.com/aq?query="+str+"&cb=myfunc";
document.body.appendChild(scr);
}
function myfunc(o){
console.log(o);
}
</script>
</body>