我正在创建一个快速原型作为更大项目的概念验证。我需要创建一个有效的跨域POST请求,并且我有jQuery可用。
因为我假设(请纠正我,如果我错了)$ .ajax()将无法工作,因为发出POST请求的页面与接收请求的服务器位于不同的域中,我猜最好的解决方案是使用JavaScript创建< iframe>,插入< form method =“post”>在那里包含我的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上做了一些搜索,并且发誓说我在一个相关的问题中发现了一些本来有用的代码。我今天找不到,但是......)
答案 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();
追加后。