当前位置:  开发笔记 > 编程语言 > 正文

Ajax成功事件无效

如何解决《Ajax成功事件无效》经验,为你挑选了5个好方法。

我有一份注册表,我正在使用$.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请求的成功回调中?



1> Tatu Ulmanen..:

结果可能不是JSON格式,所以当jQuery尝试解析它时,它会失败.您可以使用error:回调函数捕获错误.

你似乎不需要在该函数中使用JSON,因此你也可以取出该dataType: 'json'行.


我将dataType更改为文本并使其正常工作.喜欢这个`dataType:'text'`
如果未指定`dataType:`,但`url:`以`.json`结尾,也会发生这种情况.

2> js newbee..:

虽然问题已经解决,但我希望它能帮助其他人.

我犯了一个错误,试图直接使用这样的函数(成功: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.


这与ajax,jquery和处理程序无关.我们也可以发表评论提醒"整个代码应该包含在脚本标签中".解释是错误的:你不必在匿名函数中包装任何东西,只要你传递它而不是调用它,命名函数就会这样做.此外,它有误导性:在请求被发送之前调用OnSuccess,因此将它与返回任何内容的webservice相关联是没有意义的.

3> Allen..:

我尝试删除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 ... 
    }
});


请注意这一点.无论ajax调用是否成功,`complete`都将被调用,而如果web服务器以'200 OK` HTTP头响应(一切正常),则仅调用`success`.

4> 小智..:

在PHP文件中生成JSON格式化数据之前,请确保不打印(回显或打印)任何文本/数据.这可以解释你得到了一个200美元 - 但是你的成功事件仍然在你的javascript中失败了.您可以通过在firebug中查看POST submit1.php的"网络 - 应答"部分来验证脚本接收的内容.



5> David Hedlun..:

alert()在您的success回调中放一个,以确保它完全被调用。

如果不是,那仅仅是因为即使您设法命中服务器,请求也根本没有成功。合理的原因可能是超时到期,或者您的php代码中的某些异常引发了异常。

如果尚未安装用于firefox的firebug插件,请检查AJAX回调。您将能够看到响应以及响应是否收到成功(200 OK)响应。您还可以alert()complete 回调函数中放置另一个,该回调函数必须被调用。


如果您没有在“成功”中看到警报,则说明它不成功。由于响应为200 OK,Tatu的答复似乎是合理的,但是对于进一步的故障排除,您可以使用另一个事件,称为“ complete”,无论请求是否成功,总是调用该事件(“成功”仅在请求成功时发生)成功)。`complete:功能(xhr,status){alert('complete:'+ status); }`
推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有