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

Javascript jsonp和简单get请求的区别(跨域),javascript,jquery,ajax,forms,jsonp,Javascript,Jquery,Ajax,Forms,Jsonp,我必须使用JQuery和JSON向服务器发送(和接收)某些数据。 到目前为止还可以工作,但不能跨域,而且必须是跨域的 我研究了如何解决这个问题,并找到了JSONP。据我所见,使用JSONP我必须使用GET发送回调和数据(JQuery允许使用“POST”作为方法,但当我检查web流量时,我看到它实际上是将GET和everyting作为参数发送) JSONP还需要在服务器中进行更改,因为它们需要一个包含JSON数据的POST请求,并且必须实现一些东西来处理JSONP GET请求 所以我想知道这和在G

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

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

JSONP还需要在服务器中进行更改,因为它们需要一个包含JSON数据的POST请求,并且必须实现一些东西来处理JSONP GET请求

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

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


对不起,有点迷路了。。。提前感谢

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

JSONP之所以有效,是因为它是一种不使用AJAX的黑客。它不是AJAX,您不应该将其混淆,因为它在任何时候都不使用XMLHttpRequest来发送数据。这就是它如何绕过同一原产地政策的原因

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


如果不想使用CORS或JSONP,可以使用的另一个解决方案是编写一个PHP脚本或Javaservlet作为代理。这就像从脚本中打开一个新连接一样简单,将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
});

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

如果在服务器上添加头这么简单,为什么每个人都会为JSONP烦恼呢?据我所知,使用JSONP还需要在服务器中进行更改代理解决方案在我的情况下不可用,因为我需要在localhost中测试脚本,并且不是每个在localhost中测试脚本的人都希望安装代理…好的,我在这里找到了一个关于JSONP和CORS之间差异的解释,似乎CORS不是“那么简单”,而是Ajax。Ajax是所有涉及不离开页面就与服务器通信的技术的总称。这是有用的信息,但不能直接回答问题。我(现在)认为区别在于,由于同源策略,使用ajax的简单GET请求也不起作用。对于JSONP,它可以工作,因为它是broser在获取注入脚本时发出的GET请求。是的,从严格的角度来看,这不是ajax。我认为这是CORS。这不完全是我要问的,但无论如何谢谢你的回答。我已经用jQuery mobile将这个解决方案应用到了我的本地移动应用程序中,并且得到了苹果的批准。我的所有数据都是由存储在服务器上的数据库中的php文件生成的JSON格式。我一直在努力寻找一个适用于跨域脚本的解决方案,而不是将我所有的JSON请求都更改为JSONP。将头脚本插入到我的php文件中非常有效,现在我可以从整个互联网上请求JSON数据,甚至是移动本机应用程序。在我看来,这是最好的解决方案,因为我可以修改de php.json数据生成器,使其不受SQL注入或其他黑客的影响。如果您愿意,我可以发布一个php示例,说明如何维护SQL回调的安全性,并返回一个非常好的结构化JSON数据,您可以在任何地方使用(从中调用)!