繁体   English   中英

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

[英]Difference jsonp and simple get request (cross domain)

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

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

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

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

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

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

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

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

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

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

我找到了一个适用于跨域问题和JSON(而不是JSONP)的答案。 我只是用过:

header('Access-Control-Allow-Origin: *');

在我的json文件(file.php)中,并像这样调用它:

var serviceURL = 'http://your-domain.com/your/json/location.php'
$.getJSON(serviceURL,function (data) {
   var entries = data;
   //do your stuff here using your entries in json
});

顺便说一句:这是一个接收过程,而不是发送。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM