Ajax 成功事件不起作用

IT技术 javascript jquery ajax
2021-01-28 23:10:31

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

6个回答

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

无论如何,您似乎不需要该函数中的 JSON,因此您也可以取出该dataType: 'json'行。

+1 甚至是我的,但在不是我的代码上,我通过从服务器返回 json 数据来解决
2021-03-16 23:10:31
同样在$.post别名中json作为数据类型提供而没有来自服务器的实际 json 不会触发success回调
2021-03-26 23:10:31
如果你想发出一个 json ajax 请求,请确保它的 mime-type 设置为 application/json。这给我带来了一些麻烦。
2021-03-30 23:10:31
我将数据类型更改为文本并使其正常工作。像这样dataType:'text'
2021-04-09 23:10:31
如果dataType:未指定 a,但url:.json.
2021-04-09 23:10:31

虽然问题已经解决了,我还是加了这个,希望能帮到其他人。

我犯了一个错误,试图直接使用这样的函数(成功: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 服务返回异常,也会调用 OnSuccess。

这与 ajax、jquery 或处理程序无关。我们也可以有一个注释提醒“整个代码应该包含在一个脚本标签中”。解释是错误的:你不必在匿名函数中包装任何东西,命名函数就可以,只要你传递它而不是调用它。此外,它具有误导性:甚至在发送请求之前就调用了 OnSuccess,因此将其与返回任何内容的 Web 服务相关联是没有意义的。
2021-03-22 23:10:31
这个答案对我有帮助,但我没有投票,你应该根据@fdreger 评论更新你的答案。
2021-03-28 23:10:31

我尝试删除 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 ... 
    }
});
只是注意这一点。complete无论 ajax 调用是否成功,都将始终被调用,而success只有在 Web 服务器以200 OKHTTP 标头响应才会被调用(一切正常)。
2021-04-01 23:10:31

在 PHP 文件中生成 JSON 格式的数据之前,请确保您没有打印(回显或打印)任何文本/数据。这可以解释您得到 -sucessfull 200 OK- 但您的成功事件在您的 javascript 中仍然失败。您可以通过检查萤火虫中 POST submit1.php 的“网络 - 答案”部分来验证您的脚本正在接收什么。

这真的帮助了我。我知道这是一个旧答案,但这正是我遇到的问题。在调试期间使用 echo 或 print_r 并发现那些实际上导致了错误...... :) 谢谢!
2021-03-16 23:10:31
6 年后,仍然帮助人们解决这个问题!否则我不知道去哪里找。
2021-03-27 23:10:31

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

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

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

感谢您的回复。在成功事件中尝试警报,但没有奏效。我有用于 firefox 的 firebug 插件,它确实收到了成功的(200 OK)响应,所以那里没有问题。“您还可以在完整的回调中放置另一个 alert(),这绝对应该被调用。”是什么意思??非常感谢您的快速回复
2021-03-14 23:10:31
如果您没有在您的 中看到警报success,那么它就不是成功的。由于响应是 200 OK,Tatu 的回复似乎是合理的,但是为了进一步排除故障,您可以使用另一个称为complete始终调用的事件,无论请求是否成功(success仅在请求成功时才会发生)。complete: function (xhr, status) { alert('complete: '+status); }
2021-03-21 23:10:31