当值之前没有空格时,Jquery无法解析jsonp dataType响应

时间:2014-11-26 02:05:25

标签: jquery ajax json cross-domain jsonp

当jquery ajax响应处理程序无法找到以该值为前缀的空格时,它似乎失败了。这个ajax respose失败

{"ip":"bla"} 

通过

{"ip": "bla"} 

以下是我尝试的简化版代码

<html lang="en">
<body>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>

<script type="text/javascript">
$.ajax({
    type: "GET",
    url: "https://api.myjson.com/bins/4as0v",
    dataType: 'jsonp',
    contentType: "application/json",
    success: function (data) {

        alert('Success call back called')
        }
    })
</script>
Hi 

</body>
</html>

以下是我得到的错误

Uncaught SyntaxError: Unexpected token :

现在,我尝试将$ .ajax中的dataType更改为text并手动将回调中的文本解析为json,这样可行。

dataType: 'jsonp',

...

success: function (data) {
    data = JSON.parse(data);    
    }

然而,在我的实际应用程序中,我将需要发出跨域请求,因此强制使用jsonp dataType。我还尝试了多个空格分隔的值(从Jquery 1.5开始)尝试将jsonp解释为文本但没有成功。

请注意,我打算从中访问数据的url的ReponseHeader没有将Access-Control-Allow-Origin属性设置为*

非常感谢任何提示/建议。

1 个答案:

答案 0 :(得分:2)

首先,您的代码正在请求json url而不是jsonp。一个jsonp应该有一个回调函数来工作。请阅读jsonp http://en.wikipedia.org/wiki/JSONP

为了您的示例,您可以使用$ .getJSON来读取json。

$.getJSON('https://api.myjson.com/bins/4as0v', function(data){
        alert('Success call back called \n'+data.ip)
});