未捕获的语法错误:意外的标记:在天气地下响应中
Uncaught SyntaxError: Unexpected token : in WeatherUnderground response
我通过以下方式向WeatherUnderground service发出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');
}
});
但是当我得到回复时,我看到以下错误:
未捕获的语法错误: 意外令牌 :
响应的第一行带有下划线
{ "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"
}, ...
什么可能导致此问题?
提前谢谢你!
你正在使用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));
});
这将对您有所帮助。
可能还值得注意的是,在 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>
相关文章:
- 如何将getJson的响应保存在全局变量中
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 使用angularjs向浏览器发送servlet响应(下载功能)
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 不再使用innerHTML进行AJAX响应.(代码未得到响应)
- 为什么可以't我使用了AJAX响应的一部分
- 响应动画手风琴不工作
- 如何从SeleniumWebdriver获取异步Javascript响应
- Ajax调用在Firefox中不会自动响应
- 可以在响应时隐藏iphone上的“播放”按钮以进行视频播放
- 由于响应中不存在“Access Control Allow Origin”标头,跨域请求停止工作
- 如何在 JavaScript 和 HTML 中更改对输入框的提示响应
- IIS动态HTTP响应标头
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Ajax响应转换
- 使Intro.js工具提示响应
- 存储$http如何从$http函数(Angularjs)外部获取可访问变量中的响应
- 将高图饼图中的文本居中显示为响应
- Css转换没有响应
- 未捕获的语法错误:意外的标记:在天气地下响应中