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/21.html
jsonp应该是借助script标签实现的,不能发送post请求。
jsonp本来就可以处理,不过是使用js函数处理的。。。不过要带callback的函数名,然后你的js创建该函数,接收之后就会自动调用那个函数。。。曾经调用过淘宝的jsonp
jsonp
就要求返回值为json
,怎么能是“返回值为无格式文本”,不能这么搞哦
你都不明白JSONP
是啥。
因为同源策略限制,所以普通XHR是行不通的,但是script是不受这个限制的。
简单讲所谓jsonp是客户端发送一个script脚本,通常带有其他参数和一个回调函数名,然后服务端根据接受到的参数里回调函数名比如callback({data...})
, 拼装数据在函数里,然后脚本加载成功,执行本地同名回调,从而达到跨域。
你自己也说了服务端不受控制,JSONP是需要服务端配合的,你请求之后服务端还是返回一个文本,这个文本在js里执行,肯定就会报错,也就是你提到的Uncaught SyntaxError
详细的你百度就好