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()
放在你的success
callback中,以确保它被调用。
如果不是这样,那只是因为请求并不成功,即使你设法击中服务器。 合理的原因可能是超时过期,或者在你的PHP代码中引发exception。
安装Firefox的firebug插件,如果你还没有,并检查AJAXcallback。 您将能够看到响应,以及是否收到成功响应(200 OK)。 你也可以把另一个alert()
放在complete
callback中,这肯定会被调用。
我有同样的问题。 这是因为javascript
期望json
数据types返回数据。 但如果你使用回声或打印在你的PHP这种情况发生。 如果您在php
使用echo
函数来返回数据,只需删除dataType : "json"
工作得很好。
我正在返回有效的JSON,在我的“完整”callback中获得200的响应,并可以在Chromenetworking控制台中看到它…但是我没有指定
dataType: "json"
一旦我做了,不像“接受的答案”,那实际上解决了这个问题。
我有这个问题使用ajax函数从Magento恢复用户密码。 成功事件并没有被解雇,我意识到有两个错误:
- 结果不会以JSON格式返回
- 我试图将数组转换为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