Ajax失败未触发,而错误则触发

时间:2015-09-11 13:34:22

标签: jquery ajax

按钮点击时我有以下js代码:

$("#processCategories").click(function () {
    console.log('HERE');
    $.ajax({
        url: ajaxUrl, // point to server-side PHP script 
        data: {action: 'processCategories'},
        type: 'post',
        done: function () {
            console.log('SUCCESS');
            //location.reload();
        },
        fail: function (msg) {
            console.log('FAIL');
        },
        always: function (msg) {
            console.log('ALWAYS');
        }
    });
});

在我的php文件中,我添加了下一行:

header('HTTP/1.0 404 Not found');
die();

我也试过禁止。

因此,控制台记录:HERE,但不是FAILALWAYS

我正在使用它:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

documentation说:

  

弃用注意:自jQuery 1.8起,不推荐使用jqXHR.success(),jqXHR.error()和jqXHR.complete()回调。要准备最终删除的代码,请改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。

如果我将这些内容重写为errorcomplete,则两者都在运行。

我想念什么?

更新

.done也不会运行。 success确实如此。

2 个答案:

答案 0 :(得分:4)

您将jqXHR方法与$ .ajax选项混淆。

apex:inputField 返回一个jqXHR对象,并且会有一个失败的方法,所以你可以这样做:

apex:outputField

$.ajax选项包含处理成功和错误条件的函数:

  • 完整
  • 错误
  • 成功

jqXHR方法具有相同的功能:

  • 完成
  • 失败
  • 总是
  • 然后
  • 成功(已弃用)
  • 错误(已弃用)
  • 完成(已弃用)

答案 1 :(得分:3)

它们遵循jQuery's promises的模式,因此您需要将它们链接到Ajax调用。

$.ajax({
    url: ajaxUrl, // point to server-side PHP script 
    data: {action: 'processCategories'},
    type: 'post'     
}).done(function () {
    console.log('SUCCESS');
    //location.reload();
}).fail(function (msg) {
    console.log('FAIL');
}).always(function (msg) {
    console.log('ALWAYS');
});