Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过JavaScript的异步跨域POST请求?_Javascript_Ajax_Cross Domain - Fatal编程技术网

通过JavaScript的异步跨域POST请求?

通过JavaScript的异步跨域POST请求?,javascript,ajax,cross-domain,Javascript,Ajax,Cross Domain,我可以创建一个表单并使用它向任何站点发出POST请求,但表单方法不是异步的,我需要知道页面何时完成加载。我试着用一个带有表单的iframe来处理这个问题,但没有成功 有什么想法吗 编辑 不幸的是,我无法控制响应数据,它可以是XML、json或简单文本。如果跨域post返回的数据是json,那么您可以动态添加一个脚本标记,指向返回数据的URI。浏览器将加载“脚本”,然后您可以从其他javascript访问该脚本。您不能使用javascript跨域执行任何操作。您必须使用诸如PHP或asp之类的后端

我可以创建一个表单并使用它向任何站点发出POST请求,但表单方法不是异步的,我需要知道页面何时完成加载。我试着用一个带有表单的iframe来处理这个问题,但没有成功

有什么想法吗

编辑


不幸的是,我无法控制响应数据,它可以是XML、json或简单文本。

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

您不能使用javascript跨域执行任何操作。您必须使用诸如PHP或asp之类的后端语言。

您可以捕获
iframe
onload
事件。将您的
表单
定位到iframe,并监听onload。但是,您将无法访问iframe的内容,只能访问事件

试着这样做:

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

<form action='wherever.php' target='RS' method='POST'>...</form>
的对象提供跨域请求,但它使用嵌入在页面上的小型闪存控件来实现



虽然JavaScript在跨域安全请求方面还有很多工作要做,但此时,您需要使用Flash或Silverlight等插件作为发出请求的桥梁。

如果您想发出跨域请求,您应该进行JSON调用或使用服务器端代理。服务器端代理很容易设置,但不知道为什么人们会如此回避它。在其中设置规则,以便人们不能使用代理请求其他内容。

我无法控制响应数据。此外,脚本标记仅为GET,-1。当然,响应类型不是任意的。他们不会向您发送一次XML,然后下一个请求将是JSON。决定返回类型的因素背后一定有某种逻辑。胡说八道。您可以向DOM添加一个脚本标记,该脚本的SRC可以指向任何地方。脚本标记并不强制执行相同的域策略。不,但是OP声明他需要对数据做一些处理,因为数据可以是任何内容(纯文本、JSON、XML)。“脚本标记不能为您涵盖这些内容。@迪奥德斯:我还说过他不能使用javascript跨域执行任何操作,您描述的是DOM。@Pim。你说你“不能跨域做任何事情”是不正确的。GET请求(无论是XmlHttp还是脚本、Img SRC)都是可以接受的。当客户端试图将数据发布到服务器时,跨域成为一个问题。您可以在任意位置发布数据。只需设置表单元素的action属性,就可以发布到您关心的任何站点。但是,结果数据将替换加载的任何文档。如果它位于iframe中,父框架将无法看到响应,因为SOP。为什么您的iframe尝试失败?我有一种预感,它应该会起作用。你能给出你所采取的方法的细节吗?如果你无法控制响应数据,那么这不是一个安全风险,因为加载在iframe上的页面可以使用
窗口访问页面的DOM。parent
。是的,那太好了:我知道我想使用的数据现在已经加载了,太好了。但是你还是不能用。太棒了,你能举个例子吗?我不需要数据,我只需要知道事件何时被触发。我看不出问题的任何地方需要响应数据。@Diodus,好的,对不起,我一定已经阅读了OP声明(因为他这样做了)),因为OP中还有关于内容类型的内容。感谢Diodeus,除了一件小事之外,它工作得很好。“onload”事件在加载iframe后(甚至在提交表单之前)和提交iframe时触发2次。有没有办法不触发第一次加载?您忽略了一个事实,即可以使用iframe方法发出此请求。
var loadComplete = 0
function loaded() {
    //avoid first onload
    if(loadComplete==0) {
        loadComplete=1
        return()
    }
    alert("form has loaded")
}