如何将值传递给jQuery Ajax成功处理程序

时间:2010-07-01 23:30:21

标签: javascript jquery ajax

在jQuery中提供以下Ajax调用:

  {
  .
  .
  .
  ,
  getSomeData: function(args, myUrl, foo) {
        $.ajax( {
        type: "GET",
        url:  myUrl,
        data: args,
        async: true,
        dataType: 'json',
        success: myHandler  

         });
 },

   myHandler: function (data, textStatus, oHTTP, foo){   ...   }  

};

foo可以以某种方式附加到传递给success-handler myHandler的参数中吗?是否有任何方法可以将值传递给GET上的服务器,并使该值在往返中返回到客户端,重新出现在success-handler的参数列表中?我无法更改data中返回的结构。

3 个答案:

答案 0 :(得分:4)

如果您在请求中声明myHandler,则可以使用closure

getSomeData: function(args, myUrl, foo) {
        $.ajax( {
        type: "GET",
        url:  myUrl,
        data: args,
        async: true,
        dataType: 'json',
        success: function (data, textStatus, oHTTP){   ...   }  

         });
 },
这样,foo回调中就可以使用success

答案 1 :(得分:1)

如果您在$ .ajax调用是在类中,并且成功回调是通过该类的方法传递的,则它不起作用。

编辑:这是答案。请注意,我将函数ajaxCall定义为类中的方法。我将this.before,this.error和this.success定义为ajaxCall的方法,因为它们可以从superClass调用方法。

function main(url){
  this.url = url;

  this.ajaxCall = function(){

          this.before = function(){
                  //Can call main class methods
                  };
          this.error = function(){
                         //Can call main class methods
                       };
          this.success = function(data){
                           //Can call main class methods
                         };

          //This is how you pass class arguments into the success callback
          var that = this;

          $.ajax({ 
            url: this.url,
            type: 'GET',
            dataType: 'json',
            beforeSend: this.before(),
                error: this.error(),
            success: function(data){that.succes(data);}
          });

  //Run internally by calling this.ajaxCall() after it is defined
  //this.ajaxCall();
}

//Or externally
var main = new main(SOME_URL);
main.ajaxCall();

答案 2 :(得分:0)

@Unicron的答案正确,但没有给出很好的例子。检查一下:

$( 'tr.onCall' ).on( 'click', function( event ) {
    let pEvent = function() { return event; } // like a fly in amber...
    $.ajax( {
        ...
        success: function( data ) {
            let x = pEvent();   // x now equals the event object of the on("click")
        }
    });
});

通过在触发on("click")的匿名函数中声明pEvent函数,事件对象在其原始上下文中被“冻结”(封装)。即使您在ajax成功函数的不同上下文中调用它,它也会保留其原始上下文。

更具体的示例:单击时将打开一个模式对话框(样式为Div),但是当对话框关闭时,我想将焦点返回到首先单击以将其打开的元素。

$( 'tr.onCall' ).on( 'click', function( event ) {
    let rTarget = function() { return event.currentTarget; }
    $.ajax( {
        url: 'ajax_data.php',
        ...other settings...
        success: function( data ) {
            modal_dialog(
                data,
                {
                    returnTarget: rTarget(),
                    ...other settings...
                }
            );
        }
    });
});

成功后,它将调用自定义函数modal_dialog()(在其他地方定义),并传入包含各种设置的对象。 returnTarget设置包含被单击元素的HTML ID属性;因此,当我关闭对话框时,我可以运行$(options.returnTarget).focus();将焦点返回到该元素。