JQuery AJAX - 分配回调处理程序

时间:2014-01-20 17:32:45

标签: jquery ajax

我有3个功能。一个用于以下每种情况:

  • 开始
  • 成功
  • 失败

我不太确定两件事:

  1. 这些的正确属性名称3.我使用beforeSend:success:failure:

  2. 为这些3调用处理程序的正确方法。

  3. 这就是我所拥有的:

    <script type="text/javascript">
    
    
            $('.icon.delete.cosponsor').click(function () {
    
                var divId = $(this).attr("data-attr-divid");
                var recordId = $(this).attr("data-attr-id");
                $("#" + divId).fadeOut(300, function () { $("#" + divId).remove(); });
    
                //Delete a record
                $.ajax({
                        type: "POST",
                        url: '/Path/To/Action',
                        data: queryStr,
                        dataType: 'json',
                        beforeSend: OnBegin(),
                        success: OnSuccess(data),
                        failure: OnFailure(data),
                        timeout: 5000
                    });
    
    
            });
    
    
    
    /***********************************************
      AJAX Callback Handlers
     ***********************************************/
        function OnBegin() {
    
            $('#loading-area').show();
        }
    
    
        function OnSuccess(data) {
    
            $('#loading-area').hide();
    
            $.notification({
                content: 'Information saved successfully.' + data,
                error: false,
                timeout: 10000
            });
        }
    
        function OnFailure(request, error) {
    
            $('#loading-area').hide();
            $('#ValidationResultsArea').show();
            $.notification({
                content: 'Error saving data.',
                error: true,
                timeout: 10000
            });
        }
    </script>
    

3 个答案:

答案 0 :(得分:2)

你应该传递对函数的引用,而不是调用函数,看看:

    $('.icon.delete.cosponsor').click(function () {

        var divId = $(this).attr("data-attr-divid");
        var recordId = $(this).attr("data-attr-id");
        $("#" + divId).fadeOut(300, function () { $("#" + divId).remove(); });

        //Delete a record
        $.ajax({
                type: "POST",
                url: '/Path/To/Action',
                data: queryStr,
                dataType: 'json', // <<<<< dataType != datatype
                beforeSend: OnBegin, // <<<<<
                success: OnSuccess, // <<<<<
                failure: OnFailure, // <<<<<
                timeout: 5000
            });


    });

答案 1 :(得分:0)

这不是失败它是“错误”http://api.jquery.com/Ajax_Events/

答案 2 :(得分:0)

这是部分答案。我认为成功和失败的使用不太常见,许多人正在使用以下回调。

$.ajax({
         type: "POST",
          url: "callbacktestbackend.php",
    dataType : 'json'    })
                           .done(function(data, textStatus, jqXHR){
                                                                   console.log(data,
                                                                               textStatus,
                                                                               jqXHR.responseText);
                                                                                                                              })
                           .fail(function(jqXHR, textStatus, errorThrown){
                                                                         console.log             
                                                                        (jqXHR.responseText,
                                                                         textStatus,
                                                                         errorThrown);
                                                                                                                              })
                           .always(function(data, textStatus, jqXHR){
                                                                      console.log(data,
                                                                                  textStatus,
                                                                                  jqXHR);
                                                                                                                              });

您可以混合和匹配您想要使用的那些,并根据需要将代码添加到该功能。


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