jQuery POST不使用IE 11提交表单值

时间:2014-05-26 08:44:45

标签: jquery internet-explorer-11

我已经尝试了几个小时找到这个问题的解决方案,但以下代码根本不适用于Internet Explorer 11.它适用于Chrome和Firefox。使用IE11时,帖子已提交,但提交的表格为空。

<!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
            <script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
        </head>
        <body>
            <form action="/Mandate/Edit" id="mandateForm" method="post">            
                <input id="ExternalId" name="ExternalId" type="hidden" value="" />
                <input id="mandateName" name="mandateName" type="text" />
                <a href="#" id="md-submit">Create</a>
            </form>
            <script type="text/javascript">
                $(function () {
                    $("#md-submit").on("click", function (e) {
                        e.preventDefault();
                        var form = $("#mandateForm");
                        var request = $.ajax({
                            type: "POST",
                            url: form.attr("action"),
                            data: {
                                mandateName: "test4711"
                            },
                            dataType: 'json',
                            cache: false
                        });
                    });
                });
            </script>
        </body>
    </html>

非常感谢你的帮助。

6 个答案:

答案 0 :(得分:0)

在jquery中,表单序列化存在一些问题。我通常使用这个插件:http://jquery.malsup.com/form/#api

这似乎是解决问题的最简单方法。但它远非最干净的方式。您可以尝试的另一件事是:让服务器监听json requestdata。并将其序列化为json字符串。或者自己制作序列化功能。这就像3行代码。

答案 1 :(得分:0)

不要担心你尝试使用serialization()方法发送数据我希望你的问题可以解决 试试这个。

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
        <script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
    </head>
    <body>
        <form action="/Mandate/Edit" id="mandateForm" method="post">            
            <input id="ExternalId" name="ExternalId" type="hidden" value="" />
            <input id="mandateName" name="mandateName" />
            <a href="#" id="md-submit">Create</a>
        </form>
        <script type="text/javascript">
            $(function () {
                $("#md-submit").on("click", function (e) {
                    e.preventDefault();
                    var form = $("#mandateForm");
                    var request = $.ajax({
                        type: "POST",
                        url: form.attr("action"),
                        data: $('form#myForm').serialize(),
                        dataType: 'json',
                        cache: false
                    });
                });
            });
        </script>
    </body>
</html>

答案 2 :(得分:0)

serialize()方法不会将表单数据转换为Json ...

这应该有效 - IE11中的输出将为{"ExternalId":"","mandateName":"4343"}

<!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
            <script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
        </head>
        <body>
            <form action="/Mandate/Edit" id="mandateForm" method="post">            
                <input id="ExternalId" name="ExternalId" type="hidden" value="" />
                <input id="mandateName" name="mandateName" type="text" />
                <a href="#" id="md-submit">Create</a>
            </form>
            <script type="text/javascript">
                function form_to_json (selector) {
                  var ary = selector.serializeArray();
                  var obj = {};
                  for (var a = 0; a < ary.length; a++) obj[ary[a].name] = ary[a].value;
                  return JSON.stringify(obj);
                }

                $(function () {
                    $("#md-submit").on("click", function (e) {
                        e.preventDefault();
                        var form = $("#mandateForm");
                        var request = $.ajax({
                            type: "POST",
                            url: form.attr("action"),
                            data: form_to_json(form),
                            dataType: 'json',
                            cache: false
                        });
                    });
                });
            </script>
        </body>
    </html>

答案 3 :(得分:0)

我得到同样的问题,但我通过将其添加到头标记

中解决了这个问题
<meta charset="utf-8">

答案 4 :(得分:0)

今天我们在IE11中遇到了同样的问题。我发现这对我有用:

&#13;
&#13;
$.ajax({
  type: "POST",
  url: "./index.php",
  data: { name: "John", time: "2pm" },					
  cache: false,
  success: function(data){
    $.ajax({
      type: "POST",
      url: "./index.php",
      data: { name: "John", time: "2pm" },							
      cache: false
    });
}});
&#13;
&#13;
&#13;

但这不是:

&#13;
&#13;
$.ajax({
  type: "POST",
  url: "./index.php",
  data: { name: "John", time: "2pm" },					
  cache: false,
  success: function(data){
}});

$.ajax({
  type: "POST",
  url: "./index.php",
  data: { name: "John", time: "2pm" },							
  cache: false
});	
&#13;
&#13;
&#13;

此时看起来如果您同时执行多个AJAX调用,POST数据将为空,除了第一次调用。当我在彼此之后执行它们时它起作用。

答案 5 :(得分:-1)

我发现激活&#34;增强保护模式&#34;在IE11上解决了这个问题。

Internet Options --> Advanced Options --> Enable Enhanced Protected Mode

之后,重新启动浏览器并发送POST数据。