3

这是我第一次在如下类上应用 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 没有报告任何错误响应,不确定我做错了什么。

4

6 回答 6

11

在这种情况下,这可能合适,也可能不合适,但我会提供它,因为当我在寻找类似问题的答案时,它对我很有用。如果您在 Firefox 中提交带有文件上传的“multipart/form-data”表单,jquery.form 将使用 iframe 提交表单。如果返回数据的 Content-Type 是 text/plain,则 iframe 会将生成的文本包装在 <pre> 标签中,这将阻止 jquery json 解析器并给您一个解析器错误,即使 Firebug 正确显示了响应甚至 json .

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

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

于 2009-09-17T17:41:23.767 回答
1

问题在于您的 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);
                    }});

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

于 2009-06-14T15:14:03.343 回答
1

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

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

于 2009-05-26T06:57:45.467 回答
0

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>
于 2009-06-12T10:30:23.713 回答
0

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

于 2009-06-14T08:08:20.513 回答
0

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

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

$("#myform").ajaxForm({
   url: "mypage.php",
   type: "POST"
 });
于 2009-05-26T05:55:33.593 回答