【问题标题】:Ajax sends data successfully to IE but not in FirefoxAjax 成功发送数据到 IE 但在 Firefox 中没有
【发布时间】:2016-08-31 05:34:37
【问题描述】:

您好,我有以下数据通过 ajax 传输到 MVC 控制器。它在 IE 上运行时运行良好,但在 Firefox 上运行时收到错误消息。我尝试改变很多东西(添加数据类型、内容类型……等等)。其中大多数导致数据也无法通过 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 中无法正常运行! 非常感谢任何帮助!

【问题讨论】:

  • traditional: true 在这里做什么?
  • 您在 firefox 中遇到什么错误?
  • @PraveenKumar 这是我想出能够在 IE 中的控制器接收到数据时读取数据的唯一方法,否则它只会给我“null”而不是中的值列表数组。
  • @Baraa 我猜这就是导致 FF 失败的原因。做一件事。创建两个单独的 AJAX 函数,一个用于 IE,一个用于其他。在 IE 和其他人中有 traditional: true,不要包括它。看看有没有用?
  • @PraveenKumar 会试试的

标签: javascript jquery ajax model-view-controller


【解决方案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 ) {

【讨论】:

  • 感谢您的深入分析,这有助于了解更多!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-23
  • 2016-10-17
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多