Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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
jQuery POST请求-提交a<;表格>;内部<;iframe>;_Jquery_Forms_Iframe_Post_Cross Domain - Fatal编程技术网

jQuery POST请求-提交a<;表格>;内部<;iframe>;

jQuery POST请求-提交a<;表格>;内部<;iframe>;,jquery,forms,iframe,post,cross-domain,Jquery,Forms,Iframe,Post,Cross Domain,我正在创建一个快速原型,作为更大项目的概念证明。我需要创建一个工作的跨域POST请求,我有jQuery可用 由于我假设(如果我错了,请纠正我)由于发出POST请求的页面与接收请求的服务器位于不同的域中,$.ajax()将不起作用,因此我猜想最好的解决方案是使用JavaScript创建一个,在其中插入一个包含隐藏的POST数据输入的,然后提交它 我到底要怎么做?(如果可能,请提供代码示例。) 到目前为止,我有: <button type="button" name="button">M

我正在创建一个快速原型,作为更大项目的概念证明。我需要创建一个工作的跨域POST请求,我有jQuery可用

由于我假设(如果我错了,请纠正我)由于发出POST请求的页面与接收请求的服务器位于不同的域中,$.ajax()将不起作用,因此我猜想最好的解决方案是使用JavaScript创建一个,在其中插入一个包含隐藏的POST数据输入的,然后提交它

我到底要怎么做?(如果可能,请提供代码示例。)

到目前为止,我有:

<button type="button" name="button">Make Cross-Domain POST Request</button>

<script>
  $('button').click(function() {
    $('body').append('<iframe id="post_frame" style="width: 0; height: 0; border: none;"></iframe>');
    setTimeout(function() {
      var frame_body = $('#post_frame').contents().find('body');
      frame_body.append('<form action="..." method="post"><input type="hidden" name="foo" value="bar" /><input type="submit" /></form>');
      // not sure what goes here (should submit the form in the iframed document once it has loaded)
    }, 1);
  });
</script>
发出跨域POST请求
$(“按钮”)。单击(函数(){
$('body')。追加('');
setTimeout(函数(){
var frame_body=$('#post_frame').contents().find('body');
框体附加(“”);
//不确定此处的内容(加载后应在iframed文档中提交表单)
}, 1);
});
我知道我需要使用submit()方法,但我不知道它到底是什么样子,特别是因为在中,我应该只在加载后调用submit()

如果您有任何建议/想法、发现任何错误、可以推荐更好的方法等,请让我知道。提前感谢


(顺便说一句,几天前我对堆栈溢出进行了一些搜索,我可以发誓我在一个相关的问题中找到了一些有用的代码。但今天我找不到…

p
是一个post变量数组,
to
是您的操作

   var issuePOST = function(to, p) {
        var myForm = document.createElement("form");
        myForm.method = "post";
        myForm.action = to;
        if (p) {
            for (var k in p) {
                var myInput = document.createElement("input");
                myInput.setAttribute("name", k);
                myInput.setAttribute("value", p[k]);
                myForm.appendChild(myInput);
            }
        }
        document.body.appendChild(myForm);
        myForm.submit();
        document.body.removeChild(myForm);
    };
中的JavaScript片段将从IFrame跨域发布。

Do

$("#post_frame").contents().find('form').submit();

追加后。

非常感谢您的帮助,但我想使用jQuery来增强跨浏览器兼容性,我想我需要使用一个,这样页面的URL就不会改变。上面的代码应该适用于所有浏览器,它使用的基本javascript在所有浏览器中都是相同的。您可以将其放在iframe中…为了解决跨域问题,您不需要使用iframe。您可以让ajax请求使用跨域工作的jsonp对象。只需在一个ajax调用中添加数据类型:jsonp,它就可以跨域工作。伙计,你刚刚救了我一命:-)你建议的关键元素是“document.body”。出于某种原因,从iframe内发布时需要此选项。否则,仅使用“文档”就足够了。。。我不知道为什么。