2009-01-21 48 views
8

我可以创建一个窗体并使用它来对任何站点执行POST请求,事情是FORM方法不是异步的,我需要知道页面何时完成加载。我尝试使用带有窗体的iframe来解决这个问题,但没有成功。通过JavaScript的异步跨域POST请求?

任何想法?

编辑

不幸的是我有过的响应数据没有控制,从XML,JSON变化到简单的文本。

+0

为什么您的iframe尝试失败?我有一个预感,它应该工作。你能详细说明你采取的方法吗? – 2009-01-21 21:23:23

+0

如果您无法控制响应数据,那么这不会构成安全风险,因为加载在iframe上的页面可以使用`window.parent`访问您的页面的DOM。 – andho 2010-10-25 08:26:12

回答

11

您可以捕获onload事件iframe。将您的form定位到iframe并监听onload。不过,您将无法访问iframe的内容,只能访问该事件。

尝试这样:

<iframe id='RS' name='RS' src='about:blank' onload='loaded()'></iframe> 

<form action='wherever.php' target='RS' method='POST'>...</form> 

脚本块:

var loadComplete = 0 
function loaded() { 
    //avoid first onload 
    if(loadComplete==0) { 
     loadComplete=1 
     return() 
    } 
    alert("form has loaded") 
} 
1

如果从跨域post发回的数据是JSON,那么您可以动态地添加一个指向返回数据的URI的脚本标记。浏览器将加载该“脚本”,然后您可以从其他JavaScript访问。

+0

我无法控制响应数据。 – 2009-01-21 21:14:40

+0

脚本标记也只有GET,-1。 – 2009-01-21 21:15:44

+0

当然,响应类型并不是任意的。他们不会向您发送XML一次,然后下一个请求将是JSON。决定返回类型的逻辑背后必须有一些逻辑。 – Sampson 2009-01-21 21:16:19

-7

你不能做任何使用JavaScript的跨域。你必须使用PHP或ASP等后端语言。

0

YUI3IO对象提供跨域请求,但是这种情况并因此使用它嵌入在一个小的Flash控件页。

虽然有很多工作需要通过JavaScript进行安全的跨域请求,但目前需要使用Flash或Silverlight等插件作为请求的桥梁。

2

如果您想制作跨域请求,您应该进行JSON调用或使用服务器端代理。服务器端代理很容易设置,不知道为什么人们避免这么做。在其中设置规则,以便人们不能使用代理来请求其他事情。