【问题标题】:strange behavior using $('.ajax_form').ajaxForm();使用 $('.ajax_form').ajaxForm(); 的奇怪行为;
【发布时间】:2010-10-28 21:09:40
【问题描述】:

这是我第一次在像下面这样的类上应用 jquery ajaxForm

<form class="ajax_form"...><input type="text" name="q" /><input type="submit" /></form>
<form class="ajax_form"...><input type="text" name="q" /><input type="submit" /></form>

<script>
$('.ajax_form').ajaxForm({
  dataType: 'json',
  error: ajaxErrorHandler,
  success: function(response) { // do some ui update .. }
});
</script>

现在完成 Ajax 调用后,我总是进入错误部分,尽管 firebug 没有报告任何错误响应,但不确定我做错了什么。

【问题讨论】:

    标签: jquery ajaxform


    【解决方案1】:

    这在这种情况下可能合适,也可能不合适,但我会提供它,因为当我在寻找类似问题的答案时它对我很有用。如果您在 Firefox 中提交带有文件上传的“multipart/form-data”表单,jquery.form 将使用 iframe 提交表单。如果返回数据的 Content-Type 是 text/plain,则 iframe 会将生成的文本包装在

     标签中,这将阻止 jquery json 解析器并给您一个解析器错误,即使 Firebug 正确显示了响应甚至 json . 
    
    

    在我弄清楚之前,这让我头疼不已(在此线程的帮助下:http://www.extjs.com/forum/archive/index.php/t-17248.html)。

    在我的情况下,答案是确保响应 Content-Type 是“text/html”(这违反直觉,至少对我来说是这样)。

    【讨论】:

    • +1,因为您的回答帮助我确认了 iframe 的问题。还有 hork - 我喜欢这个词。
    【解决方案2】:

    @c.sokun:在这里使用类应该不是问题,只要只有一种形式使用该类。在同一页面上具有相同类的两个表单肯定会导致打嗝(参考您的代码......或者它是一个错字?)

    您是否尝试过使用 FireBug 并检查传递的参数和返回的值?那应该是第一个!

    【讨论】:

    • 我使用类的原因是因为我有多个表单需要将其转换为 ajaxForm;我在 FireBug 中检查响应标头,它是预期的 json。
    • 好的。试试这个...从其中一个表单中删除类...在您的 DOM 中只留下一个匹配的表单。查看函数是否执行成功。然后你可以确定这与连续两次提交 ajax 有关系,并采取不同的方法。
    【解决方案3】:

    问题在于您的 json 数据。这些可能格式不正确,无法解析。在这种情况下,将不会调用成功函数。

    如果您打印错误回调的消息,您可以验证这一点。使用以下代码:

    url = url + "?" + $(".ajaxForm").serialize();
    $(".ajaxForm").ajax({url: url, dataType: "json", type : "post",
                        success: function(response) {},
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            console.log(textStatus);
                            console.log(errorThrown);
                        }});
    

    其中一个打印输出应该类似于“解析器错误”。

    【讨论】:

      【解决方案4】:

      我认为您需要一个 url 和 post 类型的表单才能将数据发送到某处?

      这就是他们在jquery.com 上的设置方式:

      $("#myform").ajaxForm({
         url: "mypage.php",
         type: "POST"
       });
      

      【讨论】:

      • 好吧,为了清楚起见,我从表单中删除了 action="" 但问题不在提交部分,而是在回调函数上。
      • 这里的问题也是注意我不使用 DOM ID 而是使用类,我怀疑这会导致这种奇怪的行为。
      • 你有没有试过给其中一个 div 一个 id,然后只调用一个更新?这可能会帮助您查看调用多个元素是否存在问题。
      【解决方案5】:

      ajaxErrorHandler 是否在别处定义? 我试过你的代码,它工作得很好。你用的是什么版本的jQuery和jQuery表单?

      这是我尝试过的代码。在与此测试相同的目录中使用包含“{test:'hello world'}”的名为“test.json”的文件:

      <script type="text/javascript" src="http://malsup.com/jquery/jquery-1.2.6.js"></script>
      <script type="text/javascript" src="http://malsup.com/jquery/form/jquery.form.js?2.28"></script>
      
      <form class="ajax_form" action="test.json" method="post"><input type="text" name="q" /><input type="submit" /></form>
      <br/>
      <form class="ajax_form" action="test.json" method="post"><input type="text" name="q" /><input type="submit" /></form>
      
      <script>
      $('.ajax_form').ajaxForm({
        dataType: 'json',
        error: function() {alert("error");},
        success: function(response) {alert(response.test);}
      });
      </script>
      

      【讨论】:

      • 我使用了最新版本的 jQuery 1.3.2
      【解决方案6】:

      好吧,我已经检查了 API,并没有找到任何对名为“错误”的选项字段的引用,所以可能这就是原因。检查here

      【讨论】:

        猜你喜欢
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-10
        • 2020-06-24
        相关资源
        最近更新 更多