【问题标题】:jquery ajax $.post not working IE10jquery ajax $.post 不工作 IE10
【发布时间】:2012-06-27 22:22:05
【问题描述】:

这两种方法我都试过了。

方式 1

function Login() {
    var email = encodeURIComponent($("#loginemail").val());
    var pass = encodeURIComponent($("#password").val());
    $.ajax({
        url:"/user/login",
        type: "POST",
        data: {email:email, password:pass},
        dataType: "json"
    }).done(LoginDone);
    //$.post("/user/login", {email:email, password:pass}, LoginDone);
}

方式 2

    function Login() {
        var email = encodeURIComponent($("#loginemail").val());
        var pass = encodeURIComponent($("#password").val());
        $.post("/user/login", {email:email, password:pass}, LoginDone);
    }

这两种方式在 chrome 上都可以正常工作,但由于某种原因,对于 IE,它不会在 POST 中发送数据 {email:email, password:pass},或者根本不会发送数据。

我在本地服务器和实时网络服务器上都试过了,结果都一样。

这里使用 IE10。

【问题讨论】:

  • 这将很难解决,因为 IE10 仍处于测试阶段。
  • 严格来说,encodeURIComponent 调用应该是不必要的,因为 jQuery 会为你做这些。
  • 没有使用它,没有解决任何问题。
  • 将请求的控制台检查与相同的 IE9 或 IE8 视图进行比较,看看有什么不同。还将错误处理程序添加到 $.ajax。 "not working" 提供的信息并不多
  • 我可以在我的代码中看到问题(不使用JSON代码,而是使用'object.varible = value'),其他人可以repro。

标签: jquery ajax internet-explorer post internet-explorer-10


【解决方案1】:

无法修复@jQuery 错误跟踪器:AJAX Post on IE10 / Windows 8

【讨论】:

    【解决方案2】:

    经过深度调试,我找到了 IE10 AJAX POST Bug 的解决方法:

    不要将 POST 与 GET 一起使用。

    $.post("Page.aspx?action=edit",a,function(data) {dataRow[0]=data; GoToShowMode(row)});
    

    改成

    a.action=edit;
    $.post("Page.aspx",a,function(data) {dataRow[0]=data; GoToShowMode(row)});
    

    【讨论】:

      【解决方案3】:

      IE-10 不工作数据序列化 => $(this).serialize()

       $('#formLogin').submit(function () {
      
              $.ajax({
                  url: this.action,
                  type: this.method,
                  data: $(this).serialize(),
                  cache: false,
                  success: function (data) {
      
                      var val1 = "";
                      var val2 = "";
      
                      $.map(data, function (item) {
                          val1 = item.success;
                          val2 = item.URL;
                      });
      
                      if (data[0].messageCode == "success") {
                          GoGO(data[0].URL);
                      }
                      else {
                          alert(data[0].message);
                      }
                  }
              });
              return false;
          });
      

      为此,您可以在 _layOut.chtml 元标记之前使用此行。因此,IE-10 的工作方式与 IE-9 一样。

        <meta http-equiv="x-ua-compatible" content="IE=9" >
      

      【讨论】:

        【解决方案4】:

        试试这个:http://code.gishan.net/code/solution-to-ie10-ajax-problem 为我工作。这是 IE10 的已知问题。

        【讨论】:

          【解决方案5】:

          我在 Win7 x64 SP1 上使用 IE 10 (10.0.9200.16521) 时遇到了同样的问题。 我通过使用更新版本的 jQuery(1.9.1 代替 1.8.3)解决了这个问题

          【讨论】:

            【解决方案6】:

            罢工>

            data: {email:email, password:pass}
            

            应该是

            data: {"email":email, "password":pass}
            

            您将变量的值作为键传递,因此如果您的服务器端资源期待email,它实际上看到的是该变量的值encodeURIComponent($("#loginemail").val())

            这可能不是 IE10 的问题,它不应该像在任何浏览器中那样工作。

            更新

            由于 IE 10 中的错误修复,此答案可能不再适用。

            这个回答是错误的,因被接受而无法删除,请忽略。

            【讨论】:

            • api.jquery.com/jQuery.post/#example-1 $.post("test.php", { name: "John", time: "2pm" });
            • email and pass 如果您没有命名变量 email and pass 将起作用。因此,如果您不将其放在引号中,则键将是该变量的值。
            • 不,但这是一个有效的对象字面量{"email":email, "password":pass},所以完全像这样编码。作为更正,这只是电子邮件的问题。您的密码应该按原样工作。我知道你所说的 JQuery 文档是什么意思,但它的工作原理和我上面写的一样。
            • Javascript 对象文字中的键可以不加引号,前提是它们不是保留字。 emailpassword 均未保留。因此,IE10 的问题肯定出在其他地方 - 不是很明显它可能是什么。
            • 也就是说,this page 建议避免使用password(以及许多其他非保留字词)。
            猜你喜欢
            • 2014-01-05
            • 2010-12-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-01-20
            • 1970-01-01
            • 2013-09-16
            相关资源
            最近更新 更多