使用$(’。ajax_form’)的奇怪行为.ajaxForm();

这是我第一次在类如下的类上应用jquery ajaxForm

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

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

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

标记中,这将标记jquery json解析器并为您提供解析器错误,即使Firebug显示响应甚至json正确。 

在我弄明白之前,这让我头痛不已(在这个post的帮助下: http : //www.extjs.com/forum/archive/index.php/t-17248.html )。

我的答案是确保响应Content-Type是“text / html”(这是违反直觉的,至少对我而言)。

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

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

问题出在你的json数据上。 这些可能没有很好地形成,无法解析。 在这种情况下,不会调用成功函数。

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

 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); }}); 

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

我想你需要一个url和post类型的表单来发送数据吗?

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

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

是否在其他地方定义了ajaxErrorHandler? 我尝试了你的代码,它完美无缺。 您使用的是什么版本的jQuery和jQuery表单?

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

   

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