jQuery POST请求 - 在<iframe> </iframe> </form>中提交<form>

时间:2009-10-13 17:49:14

标签: jquery forms iframe post cross-domain

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

因为我假设(请纠正我,如果我错了)$ .ajax()将无法工作,因为发出POST请求的页面与接收请求的服务器位于不同的域中,我猜最好的解决方案是使用JavaScript创建&lt; iframe&gt;,插入&lt; form method =“post”&gt;在那里包含我的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>

我知道我需要使用submit()方法,但我不确切地知道它是什么样的,特别是因为&lt; form&gt;在&lt; iframe&gt;范围内我应该只在之后调用submit()&lt; iframe&gt;装了。

如果您有任何建议/想法,请告诉我,发现任何错误,可以推荐更好的方法等。提前致谢!

(顺便说一句,几天前我在Stack Overflow上做了一些搜索,并且发誓说我在一个相关的问题中发现了一些本来有用的代码。我今天找不到,但是......)

3 个答案:

答案 0 :(得分:4)

p是一系列差异变量,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);
    };

答案 1 :(得分:0)

this question中的JavaScript代码段将从IFrame发布跨域。

答案 2 :(得分:0)

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

追加后。