jsonp和简单get请求(跨域)的区别



我必须使用JQuery和JSON向服务器发送(和接收)某些数据。到目前为止是有效的,但不是跨领域的,而且必须是跨领域的。

我研究了如何解决这个问题,并找到了JSONP。据我所见,使用JSONP,我必须使用GET发送回调和数据(JQuery允许使用"POST"作为方法,但当我检查web流量时,我发现它实际上是在发送GET和所有作为参数的东西)。

JSONP还需要更改服务器,因为他们期望使用JSON数据的POST请求,并且他们必须实现一些东西来处理JSONP GET请求。

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

差异是使用回调的可能性吗?或者到底是什么?

抱歉有点迷路了。。。提前感谢

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

JSONP之所以有效,是因为它是一个不使用AJAX的黑客。它不是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
});

BTW:这是一个接收过程,而不是发送。

最新更新