jquery - jsonp 接收响应内容?

查看:122
本文介绍了jquery - jsonp 接收响应内容?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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
详细的你百度就好

这篇关于jquery - jsonp 接收响应内容?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆