【发布时间】:2017-11-28 20:52:47
【问题描述】:
我已经搜索了 stackoverflow 和其他论坛,但我无法解决所描述的问题。下面。
问题在 IE 11 和 Firefox 10.0.2 中的表现方式相同。
我想向网站 (http://mirgo2.co.uk/bridgesolver) 提交 (POST) 表单,并在页面上显示结果(已处理手牌的桥牌桌)。
javascript如下:
<script>
// -------------Create the form
var formData = new FormData();
var content = '[Board "1"]' + '\n' +
'[Dealer "N"]' + '\n' +
'[Vulnerable "EW"]' + '\n' +
'[Deal "N:K97.K43.6432.QT8 Q52.765.KJ.76543 AT8.AQ2.9875.AK9 J643.JT98.AQT.J2"]'; // the body of the new file...
var blob = new Blob([content], { type: "text/plain"});
formData.append( "fileToUpload", blob, "somename.pbn" )
formData.append("event",0);
// ------------Submit the form
$.ajax({
url: 'http://mirgo2.co.uk/bridgesolver/upload_file.php',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (returndata) {
$("#theTarget").html(returndata);
alert(formData);
},
error: function () {
alert("error in ajax form submission");
}
});
</script>
目标是一个iframe,在页面上定义如下:
<iframe id="theTarget" name="theTarget" ></iframe>
结果接近但不完全。
- 如 Firefox F12 所示,表单按预期提交 网络展示
- 提交返回成功,如显示的 formData 警报所示
- 但是 iframe 在警报后面的页面上显示为空
- 相反,在点击成功警报后,请求的数据单独显示。带有 iframe 的页面 消失,而板显示在同一浏览器窗口中。
我不明白为什么会发生这种情况,也找不到其他方法来实现结果。
欢迎所有建议。
布拉姆·范·奥斯特豪特
PS:cmets 提醒了我以下可能相关的内容。 发出请求的页面从域 bram.van-oosterhout.org 返回 该请求被发送到域 mirgo2.co.uk。 而浏览器窗口中的成功显示来源于dds.bridgewebs.com
使用 iframe 的建议是针对结果的域不是返回包含 ajax 请求的页面的域这一事实。
我也应该在上面说过,当服务器 mirgo2.co.uk 返回错误消息时,该机制起作用。当文件名不正确时(例如:somename.txt),服务器 (mirgo2.co.uk) 会返回一条错误消息,该消息会显示在页面上的正确位置。但是,当 dds.bridgewebs.com 返回正确的结果时,我的页面将被 dds.bridgewebs.com 提供的结果所取代。
27/6/2017 11:20 更新: 我想我找到了问题的原因。
mirgo2.co.uk 返回的代码是:
<script language="JavaScript" type="text/JavaScript">
var filename="http://mirgo2.co.uk/bridgesolver/uploads/5951a6d4a9d308.60317801.pbn";
</script>
<body>
<script language="JavaScript" type="text/JavaScript">
location.replace("http://dds.bridgewebs.com/bsol2/ddummy.htm?club=bsol_site&file=" + filename);</script>
</body>
当它被放置在 iframe 中时,它会被执行并且 location.replace 将替换整个页面。
这解释了症状。
我对 javascript API 不是很熟悉。有什么建议我如何将上述内容转换为所需的 returndata="http://dds.bridgewebs.com/bsol2/ddummy.htm?club=bsol_site&file=" + filename)?
【问题讨论】:
-
Firefox 10!! 为什么?
-
不要使用
async: false。 -
你为什么首先使用 iframe 而不是 div?
-
Firefox 10 运行在无法升级的非常旧的 Linux 平台上
-
iframe 在我使用的示例中被建议。我认为这是必要的,因为我提取的结果与请求页面所在的域位于不同的域中
标签: javascript jquery html ajax iframe