我正在尝试使用纯HTML发布表单并在目标iframe中接收服务器响应。到目前为止我所拥有的是:
<iframe name="iframe" id="iframe" onload="loaded()" style="display:none"></iframe>
比我有:
<form id="form" action="/rpc/test" method="post" target="iframe">
<!--....... form input ............-->
<input type="submit" class="button" name="Test" id="Test" value="Test">
</form>
最后在脚本标签中我加载了需要处理响应的函数:
<script language="javascript" type="text/javascript">
function loaded() {
var ifr = document.getElementById('iframe');
var dc = ifr.contentWindow || ifr.contentDocument;
if (dc.document) {
dc = dc.document;
}
var rsp = dc.documentElement.innerText || dc.documentElement.textContent;
var obj = JSON.parse(rsp);
if (obj && obj.success === true) {
// DO very important things
return;
}
}
</script>
除了IE9之外,在每个可能的浏览器中都可以正常工作(不要在较低的IE版本上测试它)。在IE9中,响应是包含正确服务器响应的文件。 IE9问我“你想打开还是保存.....?”
我的服务器是nodejs。我设定了回复:
resposnse.writeHead(200, { 'Content-Type': 'application/json' });
我可以在IE9网络监视器中跟踪Content-Type是'application / json'
有什么想法吗?
答案 0 :(得分:0)
似乎是一个糟糕的文件mime类型问题。检查服务器是否实际返回application / json输出
以下是一些类似的帖子:
答案 1 :(得分:0)
在返回时在服务器端确保将内容类型设置为JSON。
在.NET中,它会像,
result.ContentEncoding = System.Text.Encoding.UTF8;
result.ContentType = "application/json; charset=UTF-8
答案 2 :(得分:0)
在这种情况下,你应该注意chrome或firefox从ie9或8发出不同的帖子请求
chrome会发送OPTION请求首先测试连接然后发送帖子请求,但是IE没有那么照顾这个,你应该尝试更多设置如下面的响应
response.header("Content-Type", "application/json;charset=utf-8");
response.header("Access-Control-Allow-Methods","POST,GET,OPTIONS");
response.send("try");
并注意你应该首先回复chrome
if(request.method==='OPTIONS')
response.send(200);
希望此信息可以帮助您