差异jsonp和简单获取请求(跨域)

Ixx*_*Ixx 4 javascript forms ajax jquery jsonp

我必须使用JQuery和JSON将某些数据发送(并接收)到服务器.到目前为止工作,但不跨域,它必须是跨域的.

我看了解如何解决这个问题并找到了JSONP.据我所知,使用JSONP我必须使用GET发送回调和数据(JQuery允许使用"POST"作为方法,但是当我检查网络流量时,我看到它实际发送GET并且每个都作为参数).

JSONP还需要对服务器进行更改,因为他们期望使用JSON数据发出POST请求,并且他们必须实现一些处理JSONP GET请求的内容.

所以我想知道这与将数据作为GET请求中的关键值参数发送有什么区别?

是否可以使用回调?或究竟是什么?

抱歉有点失落......先谢谢

Mik*_*sen 5

JSONP不是表单提交.这是一种通过GET请求告诉服务器如何为脚本标记生成内容的方法.返回的数据是JavaScript的有效负载(不仅仅是JSON!),其中有一个函数调用回调函数(按照惯例)在GET请求中引用.

JSONP的工作原理是因为它是一个不使用AJAX的hack.它不是AJAX,你不应该混淆它,因为它不会在任何时候使用XMLHttpRequest来发送数据.这就是它绕过同源策略的方式.

根据您必须支持的浏览器,您可以在服务器端实现跨源资源共享标头,这将允许您跨受信任域使用普通的AJAX调用.大多数浏览器(IE8,Firefox 3.5+等)都支持CORS.

如果您不想使用CORS或JSONP,可以使用的另一个解决方案是编写将充当代理的PHP脚本或Java servlet.这就像从脚本打开一个新连接一样简单,将所有传入的参数从AJAX代码复制到请求中,然后在脚本结束时将响应转储回来.