jsonp调用一个服务,服务返回值为无格式文本,比如“helloworld“,并且此服务不可修改(不受控制)。jsonp请求代码如下:
$.ajax({
url:'http://www.example.com/',
type:'post',
dataType: 'JSONP',
data:{
p1:'p1',
},
success: function (v) {
console.log(v);
}
});
报错 Uncaught SyntaxError
。
烦请对jsonp有理解的同学指定一个解决思路,感激不尽!
更新
1.我感兴趣的是,在服务端不受控制的前提下,拿到响应文本是否具有可行性。
2.jquery肯定是拿到了服务器端的文本,并且将其当做js来执行,我想,既然已经拿到了,能不能先不要执行,而是让我来处理一下呢?
再更新
看了 @拾指相扣 的回答,对jsonp有了一个比较清晰的理解:json本质上是通过将请求模拟为<script>标签加载,响应数据直接被浏览器交给js引擎执行,而不受jquery控制,所以在服务端不受控制的前提下,拿到响应文本是否具有可行性。
这个问题的答案是否定的,根本没有可行性。
已经将此问题整理为博文,发布到:http://www.yanwushu.com/post/...
再再更新
有一个情况备注下:浏览器有跨域选项(亲测ie和chrome可行),打开此选项即可使用普通的ajax请求发送跨域请求。关于如何浏览器跨域,请自行查询资料。
你都不明白
JSONP
是啥。因为同源策略限制,所以普通XHR是行不通的,但是script是不受这个限制的。
简单讲所谓jsonp是客户端发送一个script脚本,通常带有其他参数和一个回调函数名,然后服务端根据接受到的参数里回调函数名比如
callback({data...})
, 拼装数据在函数里,然后脚本加载成功,执行本地同名回调,从而达到跨域。你自己也说了服务端不受控制,JSONP是需要服务端配合的,你请求之后服务端还是返回一个文本,这个文本在js里执行,肯定就会报错,也就是你提到的
Uncaught SyntaxError
详细的你百度就好