正如您所知,web浏览器的安全性不允许进行跨域请求。我读过一本书,书中说,只有当您可以将文件放在服务器上时,才应该使用XMLHTTPRequest(意味着将要加载的页面放在相同的请求域中)。如果你做不到,你应该寻找一个替代方案。
我的问题是:
- XMLHTTPRequest的跨域替代方案是什么
- WebSockets 怎么样?这项技术允许跨域请求吗
编辑:我还不清楚…
例如,我从www.domain1.com.中提取页面,并且需要从www.domain2.com.中请求javascript。因此,提取的页面应该包括以下内容:
<script src="www.domain2.com/script.js"></script>
以避免跨域限制。
我可以使用JSONP,请求将如下所示:http://ww.domain1.com/?callback=someFunction.js
但是:不是一样吗?我只是从另一个域中提取js!它是否避免了跨域限制
您可以使用XMLHttpRequest
对象进行跨域请求。这是通过所谓的"跨来源资源共享"来实现的。请参阅:http://en.wikipedia.org/wiki/Cross-origin_resource_sharing
简单地说,当向服务器发出请求时,服务器可以使用Access-Control-Allow-Origin
标头进行响应,该标头将允许或拒绝请求。浏览器需要检查此标头,如果允许,则将继续请求过程。如果没有,浏览器将取消请求。
您可以在此处找到更多信息和工作示例:http://www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using-xmlhttprequest-or-xdomainrequest.html
JSONP是一个替代解决方案,但你可能会说它有点像黑客。
执行跨域AJAX调用
您的web服务必须支持方法注入才能执行JSONP。
您的代码看起来很好,如果您的web服务和web应用程序托管在同一域中,它应该可以工作。
当您使用dataType:'jsonp'执行$.ajax时,这意味着jQuery实际上是在向查询URL添加一个新参数。
例如,如果您的URL是http://10.211.2.219:8080/SampleWebService/sample.do
,那么jQuery将添加?callback={some_random_dynamically_generated_method}。
这种方法更像是一种实际附加在窗口对象中的代理。这没有什么具体的,但看起来确实像这样:
window.some_random_dynamically_generated_method = function(actualJsonpData) {
//here actually has reference to the success function mentioned with $.ajax
//so it just calls the success method like this:
successCallback(actualJsonData);
}
查看以下内容了解更多信息
使用jQuery 进行跨域ajax JSONP请求
如果你愿意传输一些数据,并且你不需要安全(任何公共信息),你可以使用CORS代理,这很容易,你不需要更改代码或服务器端的任何内容(尤其是它不是你的服务器,如Yahoo API或OpenWeather)。我用它来获取带有XMLHttpRequest的JSON文件,它运行得很好。