我可以创建一个窗体并使用它来对任何站点执行POST请求,事情是FORM方法不是异步的,我需要知道页面何时完成加载。我尝试使用带有窗体的iframe来解决这个问题,但没有成功。通过JavaScript的异步跨域POST请求?
任何想法?
编辑
不幸的是我有过的响应数据没有控制,从XML,JSON变化到简单的文本。
我可以创建一个窗体并使用它来对任何站点执行POST请求,事情是FORM方法不是异步的,我需要知道页面何时完成加载。我尝试使用带有窗体的iframe来解决这个问题,但没有成功。通过JavaScript的异步跨域POST请求?
任何想法?
编辑
不幸的是我有过的响应数据没有控制,从XML,JSON变化到简单的文本。
您可以捕获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")
}
如果从跨域post发回的数据是JSON,那么您可以动态地添加一个指向返回数据的URI的脚本标记。浏览器将加载该“脚本”,然后您可以从其他JavaScript访问。
我无法控制响应数据。 – 2009-01-21 21:14:40
脚本标记也只有GET,-1。 – 2009-01-21 21:15:44
当然,响应类型并不是任意的。他们不会向您发送XML一次,然后下一个请求将是JSON。决定返回类型的逻辑背后必须有一些逻辑。 – Sampson 2009-01-21 21:16:19
你不能做任何使用JavaScript的跨域。你必须使用PHP或ASP等后端语言。
如果您想制作跨域请求,您应该进行JSON调用或使用服务器端代理。服务器端代理很容易设置,不知道为什么人们避免这么做。在其中设置规则,以便人们不能使用代理来请求其他事情。
为什么您的iframe尝试失败?我有一个预感,它应该工作。你能详细说明你采取的方法吗? – 2009-01-21 21:23:23
如果您无法控制响应数据,那么这不会构成安全风险,因为加载在iframe上的页面可以使用`window.parent`访问您的页面的DOM。 – andho 2010-10-25 08:26:12