Ajax成功事件不起作用

我有一个registry单,并使用$.ajax来提交。

这是我的AJAX请求:

 $(document).ready(function() { $("form#regist").submit(function() { var str = $("#regist").serialize(); $.ajax({ type: 'POST', url: 'submit1.php', data: $("#regist").serialize(), dataType: 'json', success: function() { $("#loading").append("<h2>you are here</h2>"); } }); return false; }); }); 

在我的submit1.php文件中,我检查数据库中是否存在字段电子邮件地址用户名 。 如果这些值存在页面刷新,我希望显示一条错误消息。

我如何将这个添加到我的AJAX请求的成功callback?

结果可能不是JSON格式,所以当jQuery试图parsing它时,它会失败。 您可以捕获error:callback函数。

你似乎并不需要该function的JSON,所以你也可以取出dataType: 'json'行。

我试图删除dataType行,它不适合我。 我通过使用“完成”而不是“成功”作为callback来解决问题。 IE的成功callback仍然失败,但由于我的脚本运行并完成无论如何,这就是我所关心的。

 $.ajax({ type: 'POST', url: 'somescript.php', data: someData, complete: function(jqXHR) { if(jqXHR.readyState === 4) { ... run some code ... } } }); 

在jQuery 1.5中,你也可以这样做。

 var ajax = $.ajax({ type: 'POST', url: 'somescript.php', data: 'someData' }); ajax.complete(function(jqXHR){ if(jqXHR.readyState === 4) { ... run some code ... } }); 

虽然这个问题已经解决了,但是我希望它能帮助别人。

我犯了一个错误试图直接使用这样的function(成功:OnSuccess(productID))。 但是你必须先传递一个匿名函数:

  function callWebService(cartObject) { $.ajax({ type: "POST", url: "http://localhost/AspNetWebService.asmx/YourMethodName", data: cartObject, contentType: "application/x-www-form-urlencoded", dataType: "html", success: function () { OnSuccess(cartObject.productID) }, error: function () { OnError(cartObject.productID) }, complete: function () { // Handle the complete event alert("ajax completed " + cartObject.productID); } }); // end Ajax return false; } 

如果不使用匿名函数作为包装,则即使Web服务返回exception,也会调用OnSuccess。

确保在生成您的PHP文件中的JSON格式数据之前,您不打印(回显或打印)任何文本/数据。 这可以解释,你会得到一个 – 完成200 OK – 但你的成功事件仍然失败在您的JavaScript。 您可以通过检查POST submit1.php的firebug中的“Network – Answer”部分来validation您的脚本正在接收的内容。

alert()放在你的successcallback中,以确保它被调用。

如果不是这样,那只是因为请求并不成功,即使你设法击中服务器。 合理的原因可能是超时过期,或者在你的PHP代码中引发exception。

安装Firefox的firebug插件,如果你还没有,并检查AJAXcallback。 您将能够看到响应,以及是否收到成功响应(200 OK)。 你也可以把另一个alert()放在completecallback中,这肯定会被调用。

我有同样的问题。 这是因为javascript期望json数据types返回数据。 但如果你使用回声或打印在你的PHP这种情况发生。 如果您在php使用echo函数来返回数据,只需删除dataType : "json"工作得很好。

我正在返回有效的JSON,在我的“完整”callback中获得200的响应,并可以在Chromenetworking控制台中看到它…但是我没有指定

 dataType: "json" 

一旦我做了,不像“接受的答案”,那实际上解决了这个问题。

我有这个问题使用ajax函数从Magento恢复用户密码。 成功事件并没有被解雇,我意识到有两个错误:

  1. 结果不会以JSON格式返回
  2. 我试图将数组转换为JSON格式,但是这个数组有非UTF字符

所以每次我试图用json_eoncde()来编码返回的数组时,这个函数都不起作用,因为它的索引之一有非UTF字符,其中大部分是巴西葡萄牙语的重音。

我使用XML将结果从服务器上的PHP返回到网页,我有相同的行为。

在我的情况下,原因是,结束标记不符合开始标记。

 <?php .... header("Content-Type: text/xml"); echo "<?xml version=\"1.0\" encoding=\"utf-8\"?> <result> <status>$status</status> <OPENING_TAG>$message</CLOSING_TAG> </result>"; ?> 

我试图从控制器返回string,但为什么控制返回到错误块不成功的Ajax

 var sownum="aa"; $.ajax({ type : "POST", contentType : 'application/json; charset=utf-8', dataType : "JSON", url : 'updateSowDetails.html?sownum=' + sownum, success : function() { alert("Wrong username"); }, error : function(request, status, error) { var val = request.responseText; alert("error"+val); } }); 

在我的情况下,错误是这是在服务器端,因此它返回一个HTML

 wp_nonce_field(basename(__FILE__), "mu-meta-box-nonce"); 

成功callback有两个参数:

 success: function (data, textStatus) { } 

还要确保submit1.php设置正确的内容types头文件: application/json