jQuery如何??是否将其他参数传递给$.ajax调用的成功回调?

jQuery如何??是否将其他参数传递给$.ajax调用的成功回调?,jquery,jquery-callback,Jquery,Jquery Callback,我试图将其他参数传递回成功回调方法,这似乎是徒劳的,因为我已经为成功的ajax调用创建了成功回调方法。有点背景。我有一个页面,其中有许多动态创建的textbox/selectbox对。每对具有动态分配的唯一名称,如name=“unique-pair-1_txt-url”和name=“unique-pair-1_selectBox”,则第二对具有相同的名称,但前缀不同 为了重用代码,我精心编制了回调函数,以获取数据和对selectbox的引用。但是,当启动回调时,对selectbox的引用返回为“

我试图将其他参数传递回成功回调方法,这似乎是徒劳的,因为我已经为成功的ajax调用创建了成功回调方法。有点背景。我有一个页面,其中有许多动态创建的textbox/selectbox对。每对具有动态分配的唯一名称,如name=“unique-pair-1_txt-url”和name=“unique-pair-1_selectBox”,则第二对具有相同的名称,但前缀不同

为了重用代码,我精心编制了回调函数,以获取数据和对selectbox的引用。但是,当启动回调时,对selectbox的引用返回为“未定义”。我读到这应该是可行的。我甚至尝试过利用“上下文”选项,但仍然一无所获。下面是我尝试使用的脚本块:


$j=jQuery.noConflict();
函数getImages(urlValue,selectBox){
$j.ajax({
键入:“获取”,
url:$j(urlValue).val(),
数据类型:“jsonp”,
上下文:选择框,
成功:功能(数据){
加载图像选择(数据)
} ,
错误:函数(xhr、ajaxOptions、thrownError){
警报(xhr.状态);
警报(thrownError);
}
});
}
函数loadImagesInSelect(数据){
var select=$j(本);
select.empty();
$j(数据)。每个(函数(){
var theValue=$j(这个)[0][“@value”];
var theId=$j(this)[0][“@name”];
select.append(“+theValue+”);
});
select.children(“:first”).attr(“selected”,true);
}    
从我所读到的,我觉得我是接近,但我只是不能把我的手指上缺少的环节。请以你典型的忍者隐身方式提供帮助。短暂性脑缺血发作

****更新**** 尼克是个真正的忍者。他们应该为此发明一个新的徽章!他下面的答案就说明了这一点。正如他提到的,它是1.4特定的,但我可以接受。这是我的最终代码,适用于任何正在训练的忍者(以及我未来的参考):


$j=jQuery.noConflict();
函数getImages(urlValue,selectBox){
$j.ajax({
键入:“获取”,
url:urlValue+'?回调=?',
数据类型:“jsonp”,
上下文:选择框,
成功:jQuery.proxy(函数(数据){
var select=$j(本);
select.empty();
$j(数据)。每个(函数(){
var theValue=$j(这个)[0][“@value”];
var theId=$j(this)[0][“@name”];
select.append(“+theValue+”);
});
select.children(“:first”).attr(“selected”,true);
},选择框),
错误:函数(xhr、ajaxOptions、thrownError){
警报(xhr.状态);
警报(thrownError);
}
});
}

更新:如果您使用的是jQuery 1.4,请使用它来简化一些事情:

success: jQuery.proxy(function (data) {
    var select = $j(this);
    select.empty();
    $j(data).each(function() {
        var theValue = $j(this)[0]["@value"];
        var theId = $j(this)[0]["@name"];
        select.append("<option value='" + theId + "'>" + theValue + "</option>");
    });
    select.children(":first").attr("selected", true);
}, selectBox)
success:jQuery.proxy(函数(数据){
var select=$j(本);
select.empty();
$j(数据)。每个(函数(){
var theValue=$j(这个)[0][“@value”];
var theId=$j(this)[0][“@name”];
select.append(“+theValue+”);
});
select.children(“:first”).attr(“selected”,true);
},选择框)

将其放入$.ajax参数中

invokedata: {
    data1: "yourdata",
    data2: "moredata"
}
在success函数中,像这样使用它

this.invokedata.data1;
this.invokedata.data2;
function myObject {
    var getImage = function(..) { }
    var loadImagesInSelect = function(..) { }
}
$.ajax调用和success函数也必须是同一对象的一部分。将函数放在一个对象中,并像这样定义它们

this.invokedata.data1;
this.invokedata.data2;
function myObject {
    var getImage = function(..) { }
    var loadImagesInSelect = function(..) { }
}

我就是这么做的,而且效果也很好:

$.ajax('URL', {
    myCustomControl: selectBox,
    myCustomVariable: 'teste',
    data:
    {
       myData: 1
    },
    success: function (data, textStats, jqXHR) {
        myFunction(data, textStats, jqXHR, this.myCustomControl, this.myCustomVariable);
    }   
});
您可以将控件和变量添加到ajax调用的参数中。

这超出了范围
正如您(或任何其他人)所理解的1,在原始示例中,
loadImagesInSelect()
中未定义
this
的原因是该函数位于不同的作用域下,作用域不会像那样“级联”2

当您在AJAX调用中指定
selectBox
的“上下文”时,它会为指定给“success”和“error”的函数设置上下文(
this
)。(碰巧它们都是匿名函数。)此时,
this
在这两个函数中都定义为
selectBox
的值。现在,在传递给“success”的函数中,调用
loadImagesInSelect()
。调用函数时,它会创建一个新的作用域。在此范围内,
将在非严格模式下为
窗口
,在严格模式下为
未定义


以图形方式(在严格模式3下)放置:
//此=窗口(全局范围)
$j=jQuery.noConflict();
函数getImages(urlValue,selectBox){
//这=未定义(功能范围级别1)
$j.ajax({
键入:“获取”,
url:$j(urlValue).val(),
数据类型:“jsonp”,
上下文:选择框,
成功:功能(数据){
//此=选择框(功能范围级别2)
加载图像选择(数据);
},
错误:函数(xhr、ajaxOptions、thrownError){
//此=选择框(功能范围级别2)
警报(xhr.状态);
警报(thrownError);
}
});
}
函数loadImagesInSelect(数据){
//此=未定义(功能范围级别3)
var select=$j(本);
select.empty();
$j(数据)。每个(函数(){
var theValue=$j(这个)[0][“@value”];
var theId=$j(this)[0][“@name”];
select.append(“+theValue+”);
});
select.children(“:first”).attr(“selected”,true);
}

$.proxy()
是冗余的 在更新的代码中使用
$.proxy()
是多余的。您使用
$.proxy()
添加到以前调用的函数
loadImagesInSelect()
,但您还是将该函数上移到了“success”(而不是从“success”中调用它)。它现在已经可以访问由“context”指定的
this
的值

您可以删除
$.proxy()var someData = "hello";

jQuery.ajax({
    url: "http://maps.google.com/maps/api/js?v=3",
    indexValue: {param1:someData, param2:"Other data 2", param3: "Other data 3"},
    dataType: "script"
}).done(function() {
    console.log(this.indexValue.param1);
    console.log(this.indexValue.param2);
    console.log(this.indexValue.param3);
});