我有以下函数接受此频率参数并调用api,但参数频率未在SUCCESS回调中定义,我需要它。如何将该参数传递给我的回调?
init : function(frequency) {
$.ajax({
url: 'api/v1/dashboard',
type: "GET",
dataType: "json",
data : {username : "demo",frequency : frequency},
success: function(data) {
dashboard_hander.set_data(data.dashboard);
//here frequency is undefined
}
});
},
编辑2 =====
通过定义parameters = {username:“demo”,frequency:frequency}; 在$ .ajax之外并作为数据对象传递,或在更高的范围内定义频率,如:
var dashboard_hander = {
frequency : "",
init : function(frequency) {
this.frequency = frequency;
...
}
}
答案 0 :(得分:2)
只需在更高的范围内定义它。
init : function(frequency) {
var myData = {username : "demo",frequency : frequency};
$.ajax({
url: 'api/v1/dashboard',
type: "GET",
dataType: "json",
data : myData,
success: function(data) {
alert(myData.frequency);
dashboard_hander.set_data(data.dashboard);
//here frequency is undefined
}
});
},
答案 1 :(得分:2)
演示http://jsfiddle.net/B2h8m/2/ 这是它的代码:
var test = {init : function(frequency) {
(function() {
$.ajax({
url: 'api/v1/dashboard',
type: "GET",
dataType: "json",
data : {username : "demo",frequency : frequency},
success: function(data) {
alert(frequency);
},
error: function(data) {
alert(frequency);
}
});
})();
}}
test.init(10);
包装$ .ajax的附加函数将创建一个闭包,这样你就可以访问频率。
修改强> 此外,奇怪你在那个地方没有定义它。请参阅this演示。它使用的是相同的代码。并且工作正常。我添加的附加功能不需要,因为成功回调函数也会创建一个闭包。除非您显示的代码不同,否则您的代码中的成功定义如下:
success: successHandlerFunctionName
在这种情况下,您可以将其更改为:
success:function(data) {successHandlerFunctionName(data, frequency);}
其中频率将来自闭幕
答案 2 :(得分:1)
参数frequency
是定义的,因为它由闭包保存。只有在ajax调用后更改它才会消失。
Demonstration with this code :
<script>
var obj = {
init : function(frequency) {
$.ajax({
url: 'index2.html',
type: "GET",
dataType: "html",
data : {username : "demo",frequency : frequency},
success: function(data) {
alert('frequency:' + frequency);
}
});
}};
obj.init(33);
</script>