这是一个烦人的问题,我不认为只有IE出现此问题。基本上,我有一个Node.js服务器,从该服务器进行跨域调用以获取一些JSON数据进行显示。
这需要是一个JSONP调用,我在URL中提供了一个回调。我不确定的是,该怎么做?
因此,网站(domainA.com)的HTML页面带有这样的JS脚本(在Firefox 3中一切正常):
<script type="text/javascript"> var jsonName = 'ABC' var url = 'http://domainB.com:8080/stream/aires/' //The JSON data to get jQuery.getJSON(url+jsonName, function(json){ // parse the JSON data var data = [], header, comment = /^#/, x; jQuery.each(json.RESULT.ROWS,function(i,tweet){ ..... } } ...... </script>
现在我的Node.js服务器非常简单(我正在使用express):
var app = require('express').createServer(); var express = require('express'); app.listen(3000); app.get('/stream/aires/:id', function(req, res){ request('http://'+options.host+':'+options.port+options.path, function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body); // Print the google web page. res.writeHead(200, { 'Content-Type': 'application/json', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true' }); res.end(JSON.stringify(JSON.parse(body))); } }) });
如何更改这两个,以便它们可以在IE中使用跨域GET?我一直在搜索互联网,似乎有些不一样的东西jQuery.support.cors = true;。似乎也有很多冗长的解决方法。
jQuery.support.cors = true;
对于这种类型的东西,我找不到真正的“理想”设计模式。
鉴于我对网页和跨域Web服务都拥有控制权,因此我要发送的最佳更改是什么,以确保所有IE版本以及FireFox,Opera,Chrome等的兼容性?
干杯!
假设我们有两个服务器,myServer.com和crossDomainServer.com,我们都控制这两个服务器。
假设我们希望myServer.com的客户端从crossDomainServer.com提取一些数据,首先该客户端需要向crossDomainServer.com发出JSONP请求:
// client-side JS from myServer.com // script tag gets around cross-domain security issues var script = document.createElement('script'); script.src = 'http://crossDomainServer.com/getJSONPResponse'; document.body.appendChild(script); // triggers a GET request
在跨域服务器上,我们需要处理以下GET请求:
// in the express app for crossDomainServer.com app.get('/getJSONPResponse', function(req, res) { res.writeHead(200, {'Content-Type': 'application/javascript'}); res.end("__parseJSONPResponse(" + JSON.stringify('some data') + ");"); });
然后在客户端JS中,我们需要一个全局函数来解析JSONP响应:
// gets called when cross-domain server responds function __parseJSONPResponse(data) { // now you have access to your data }
在包括IE 6在内的各种浏览器上都能很好地运行。