Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将值传递给jQuery Ajax成功处理程序_Javascript_Jquery_Ajax - Fatal编程技术网

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

Javascript 如何将值传递给jQuery Ajax成功处理程序,javascript,jquery,ajax,Javascript,Jquery,Ajax,在jQuery中进行以下Ajax调用: { . . . , getSomeData: function(args, myUrl, foo) { $.ajax( { type: "GET", url: myUrl, data: args, async: true, dataType: 'json', success: myHandler

在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){   ...   }  

};

value
foo
是否可以以某种方式附加到传递给success handler
myHandler
的参数中?有没有办法在GET上向上传递一个值,并让该值在往返过程中返回给客户机,并重新出现在成功处理程序的参数列表中?我无法更改
数据中返回内容的结构

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


这样,
foo
将在
success
回调中对您可用。

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

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

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();

@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")
        }
    });
});
通过在(“单击”)
时触发的匿名函数中声明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()
将焦点返回到该元素

$( '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...
                }
            );
        }
    });
});