Internet Explorer 10无法发送Ajax Post数据。

6

好的,我花了几个小时研究这个问题,但仍然不知所措。

Internet Explorer 10将使用jQuery提交Ajax请求,但它不会包含POST数据。

以下是代码:

var ajaxData = "FirstName="+encodeURIComponent($('#FirstName').val()); //get the data from the account form
                ajaxData += "&LastName="+encodeURIComponent($('#LastName').val()); 
                ajaxData += "&EmailAddress="+encodeURIComponent($('#EmailAddress').val());
                ajaxData += "&CAT_Custom_246311="+encodeURIComponent(listData);

                var config = {
                    async: false,
                    type: "POST",
                    url: "/FormProcessv2.aspx?WebFormID=44714&OID={module_oid}&OTYPE={module_otype}&EID={module_eid}&CID={module_cid}&JSON=1",
                    dataType: "json", // text"json",
                    processData: false,
                    data: ajaxData,
                    timeout: 70000,
                    cache: false,

                };

                $.ajax(config)
                .done(function(data, event) {
                    if(data.FormProcessV2Response.success == true){ //success field is in BC response
                        alert("The list was submitted sucessfully.");
                        console.log(XHR);
                    } else{
                        alert("An error occurred and the list was not submitted.");
                    }
                })
                .fail(function(msg,event) {
                    alert("An error occurred and the list was not submitted.");
                });

其他浏览器(Safari,Opera,Chrome,Firefox,IE9)都可以正常运行此代码,但是在IE 10中失败了。使用fiddler查看后发现,其他浏览器和IE 10之间的头部信息几乎相同,但IE 10的请求头具有Content length值为0,且没有正文文本。
关于其他人遇到的一些问题,我没有任何类似下载管理器的插件。所有插件都是默认的。以下是我的插件截图。
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("POST",config.url,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(config.data);
}

这是来自w3schools的示例文本,用于原始请求,并包含我的数据。

以下是Internet Explorer自身(使用dev工具)提供的数据值示例:

FirstName=Joe&LastName=Spacely&EmailAddress=tester%40test.com&CAT_Custom_246311=test%3Dtest

我正在使用带媒体包的 Windows 8 x64 系统上的 Internet Explorer 10.0.9200.16519。

Internet Explorer 完全不支持它吗?

如果有任何帮助,将不胜感激。哦,请不要告诉我 IE 有多糟糕。我们都知道它很麻烦,但作为网站开发人员,我们仍然必须处理它。


你的页面中是否正确引入了jQuery? - Mooseman
2
w3fools 并不是一个好的示例来源。我甚至都不会称它为一个糟糕的来源。 - Marc B
1
你为什么要将 processData 设置为 false?看起来你正在构建数据的查询字符串。 - Mathew Thompson
3
这是否与您的URL已经有$_POST数据有关?也许如果您将该信息包含在变量中并只使用静态URL,您会取得更大的成功。另外,您可以考虑使用{key:value}配对,因为构建查询字符串很难维护。 - PlantTheIdea
感谢大家的快速回答。Mooseman,是的,jQuery已经正确地包含了。在其他所有浏览器中都可以正常工作。Marc B,使用MSDN和实际的XMLHttpRequest规范也是一样的(但我们知道IE遵循得有多好!)。@LifeInTheGrey,好问题。我会看看并回复大家的。 - techdude
显示剩余3条评论
2个回答

2

我以前遇到过IE和表单数据的问题。我发现最好确保我的输入字段用一个带有id的表单标签包装起来。然后在提交数据时,使用jQuery .serialize() 函数为您构建发布数据字符串。

所以,您的配置应该像这样:

var config = {
    async: false,
    type: "POST",
    url: "/FormProcessv2.aspx", //truncated for simplicity
    dataType: "json",
    processData: false,
    data: $('#formName').serialize(),
    timeout: 70000,
    cache: false
};

此外,为了确保您将此ajax post绑定到表单提交或按钮单击,请使用event.preventDefault()阻止默认的表单提交操作。

谢谢,但这与主题无关。就该主题而言,信息并非来自表格。 - techdude

2

按照要求翻译如下:

这是否与您的URL已经有$_POST数据有关?也许如果您将该信息包含在变量中,并只使用静态URL,您将获得更多成功。

顺便说一句,您可以考虑使用{key:value}对,因为构建查询字符串更难以维护。


再次感谢您注意到关键值的想法。我通常会这样做,但在这种情况下,为了清晰起见,我使用了纯字符串。我建议任何阅读此内容的人也使用对象。 - techdude
@VipanKumar - 你能更详细地说明一下吗?因为我经常使用jQuery AJAX和正确的{key:value}对,它在IE11上绝对可以工作。 - PlantTheIdea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接