我有一份注册表,我正在使用$.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("you are here
"); } }); return false; }); });
在我的submit1.php文件中,我检查数据库中是否存在字段电子邮件地址和用户名.如果在没有页面刷新的情况下存在这些值,我希望显示错误消息.
如何将此添加到我的AJAX请求的成功回调中?
结果可能不是JSON格式,所以当jQuery尝试解析它时,它会失败.您可以使用error:
回调函数捕获错误.
你似乎不需要在该函数中使用JSON,因此你也可以取出该dataType: 'json'
行.
虽然问题已经解决,但我希望它能帮助其他人.
我犯了一个错误,试图直接使用这样的函数(成功: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; }
如果不使用匿名函数作为包装器,即使webservice返回异常,也会调用OnSuccess.
我尝试删除dataType行,但它对我不起作用.我通过使用"完整"而不是"成功"作为回调解决了这个问题.IE中的成功回调仍然失败,但是因为我的脚本运行并且完成了所有我关心的事情.
$.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 ... } });
在PHP文件中生成JSON格式化数据之前,请确保不打印(回显或打印)任何文本/数据.这可以解释你得到了一个200美元 - 但是你的成功事件仍然在你的javascript中失败了.您可以通过在firebug中查看POST submit1.php的"网络 - 应答"部分来验证脚本接收的内容.
alert()
在您的success
回调中放一个,以确保它完全被调用。
如果不是,那仅仅是因为即使您设法命中服务器,请求也根本没有成功。合理的原因可能是超时到期,或者您的php代码中的某些异常引发了异常。
如果尚未安装用于firefox的firebug插件,请检查AJAX回调。您将能够看到响应以及响应是否收到成功(200 OK)响应。您还可以alert()
在complete
回调函数中放置另一个,该回调函数必须被调用。