2011-09-29 25 views

回答

-2

你可以尝试使用JSONP jQuery的例子:

$.ajax({ 
    url: "test.php", 
    dataType: "jsonp" 
    success: function(data){ 
    console.log(data) 
    } 
}); 

或者如果你有机会到所请求的内容,您可以设置访问控制允许来源头。 PHP例如:

header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']); 
0

Ext JS 3.4 online documentation的将提供可用于跟踪源代码中的类Ext.Ajax继承模型关联到Ext.Ajax.request方法调用。但是,我建议您不要花费更多的时间和资源来重新创建轮子,而是建议通过proxy配置选项将原生Ext JS Ext.data.ScriptTagProxy类实现到您的预先存储的商店中,以促进您对远程商店的跨域请求。以下是我所指的一个简短例子。

var myJsonStore = new Ext.data.JsonStore 
({ 
    autoLoad : true, 
    proxy : new Ext.data.ScriptTagProxy 
    ({ 
     url : 'http://www.cross-domain.com/file.php' 
    }), 
    fields : ['myIdColumn','myCharColumn','myDateColumn'] 
}); 

加成

因为你打算使用的Ext JS请检出ACD (AJAX Cross Domain)库移开。

+0

但我打算离开使用ExtJS ......这是否表明继续使用ExtJS? –

+0

不一定。我试图建议你从使用Ext JS 3.4在线文档的角度回顾'Ext.Ajax'类继承模型及其基础'request'方法逻辑。通过开始并了解继承层次结构,您应该能够轻松遍历树,识别并查看超类方法和负责促成跨域请求的逻辑。我的例子可能被误导了,但是打算暗示特定的'Ext.data.ScriptTagProxy'类,你可能会发现你正在寻找的东西。 –

+0

请检查我添加的非常简单和轻量级的JavaScript AJAX库,它提供了跨域支持。如果您是在编写本土解决方案时设置的,您可以使用库本身或源代码作为参考。 –

3

我目前正在使用ExtJS 3.3.1,我还没有将开关切换到4,但很可能会出现新的项目。如果不查看Ext源代码,我可以告诉你他们正在使用JSONP来完成此任务,它是进行跨域AJAX调用的唯一方法,因为JavaScript必须遵守same-origin policy

你是否想要做一个JSONP的纯JS实现?或者你是否已经使用JS库?

编辑

根据我们的意见......他们正在POST请求。这对于JSONP来说是不可能的。所以据我所知,他们使用iframe的诡计类似。这与在旧版浏览器上“AJAX”上传文件的技巧是一样的。

This链接更详细地解释它。

此外,在Valum's file uploader中使用了相同的方法(iframe,POST,上载文件)。遵循ExtJS源代码要容易得多。

+0

但是你可以使用JSONP发送POST请求吗?我正在观看Firebug中的网络活动,并且该页面正在发送跨域POST请求 –

+0

现在,您对我有好奇......我假定JSONP只能发送GET请求。我要去挖掘。 –

+0

你和我都是男人! –

0

JSONP是一个黑客,但可用。

但是,如果您控制正在交叉的域,请考虑使用CORS。 CORS涉及在来自网站的响应中放置标题(访问控制 - 允许来源):http://enable-cors.org/

它受IE 8+(带有警告,natch),Firefox和WebKit浏览器的支持。IE警告是这样的:IE为CORS请求使用不同的请求对象(XDomainRequest)。如果您必须支持Opera,则需要使用JSONP或polyfill(类似https://github.com/gimite/web-socket-js/,这需要Flash)。

如果您不控制有问题的域名,可以尝试让他们支持CORS。