【发布时间】:2011-11-27 15:42:01
【问题描述】:
这是一个烦人的问题,我不认为只有 IE 有这个问题。基本上我有一个 Node.js 服务器,我从中进行跨域调用以获取一些 JSON 数据进行显示。
这需要是一个 JSONP 调用,我在 URL 中提供了一个回调。我不确定的是,如何做到这一点?
所以网站 (domainA.com) 有一个带有这样的 JS 脚本的 HTML 页面(在 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;,它不起作用。似乎还有很多冗长的解决方法。
对于这类事情,我找不到真正的“理想”设计模式。
鉴于我对网页和跨域 Web 服务都有控制权,因此我要进行哪些更改以确保所有 IE 版本以及 FireFox、Opera、Chrome 等的兼容性?
干杯!
【问题讨论】:
-
谢谢,已经知道了,所以我的问题是如何使用 JSONP?在那个问题中没有使用 JSONP...
-
抱歉,错过了这一点。这个giantflyingsaucer.com/blog/?p=2682怎么样。使用
jsonp和jsonpCallback属性。您的服务器端代码需要读取这些参数并围绕您的数据包装一个函数调用。
标签: javascript jquery internet-explorer node.js cross-domain