Ajax成功地将数据发送到IE,但不是在Firefox中

时间:2016-05-05 12:18:37

标签: javascript jquery ajax model-view-controller

您好我有以下数据是通过ajax到MVC控制器。它在IE上运行时工作得很好,但在firefox上运行时收到错误。我尝试改变这么多东西(添加dataTypes,contentType ......等等)。其中大多数导致数据也不会通过IE发送。

function sendData() {
    var currData = new Array();
    var elements = document.getElementById("formID").elements;
    for (var i = 0, element; element = elements[i++];) {
        if (element.value != "Submit Query") {
            if (element.value != "") {
                currData.push(element.value);
            }
        }
    }
    var finData = {values: currData};
    $.ajax({
        type: "POST",
        url: "home/sendcurr",
        data: finData,
        traditional: true,
        success: function (recData) {
            populateObjData(recData);
        },
        error: function () {
            alert("error");
        }
    });
}

在控制器中,我收到的数据为:

List<String> values

并在成功时将以下数据返回给ajax。

var jsonData = new JavaScriptSerializer().Serialize(_object);
return jsonData;

再次,这个现在在IE中完美运行,但不是Firefox! 非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

使用IE11 + Chrome50和FF46测试代码后,如果我使用或不使用the traditional style of param serialization.

,我获得了以下结果
traditional: true:
Chrome  -->  "["values=1","values=2","values=Submit%20Query"]"
FF      -->  "["values=1","values=2","values=Submit%20Query"]"
IE      -->  "[values=1,values=2,values=Submit%20Query]"
traditional: false:
Chrome -->  "["values%5B%5D=1","values%5B%5D=2","values%5B%5D=Submit%20Query"]"
FF     -->  "["values%5B%5D=1", "values%5B%5D=2", "values%5B%5D=Submit%20Query"]"
IE     -->  "[values%5B%5D=1,values%5B%5D=2,values%5B%5D=Submit%20Query]"

使用serialize代替结果:

Chrome: --> "["firstName=1","lastName=2"]"
FF      --> "["firstName=1", "lastName=2"]"
IE:     --> "[firstName=1,lastName=2]"

对于if问题,我写了一个关于错误的评论。

所以,我建议你减少代码行并编写类似的东西:

function sendData() {
  var finData = $('#formID').serialize();
  $.ajax({
    type: "POST",
    url: "z.html",
    data: finData,
    success: function (recData) {
      //populateObjData(recData);
      alert('success');
    },
    error: function () {
      alert("error");
    }
  });
}
$(function () {
  $('input[type="submit"]').on('click', function(e) {
    e.preventDefault();
    sendData();
  });
});
<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>


<form id="formID" action="z.html" method="post">
    <input name="firstName" value="1">
    <input name="lastName" value="2">
    <input type="submit" value="Submit Query">
</form>

如果您有兴趣调试jQuery代码,可以查看:

jQuery.param = function( a, traditional ) {