我想使用jQuery的ajax从服务器获取数据。
我希望把成功的回调函数定义外面.ajax()块像下面这样。 所以,我需要声明变量dataFromServer像下面这样我就能从成功回调使用返回的数据?
我见过的大多数人定义内成功回调.ajax()块。 那么,下面的代码正确的,如果我想外界定义成功的回调?
var dataFromServer; //declare the variable first
function getData() {
$.ajax({
url : 'example.com',
type: 'GET',
success : handleData(dataFromServer)
})
}
function handleData(data) {
alert(data);
//do some stuff
}
Answer 1:
只需使用:
function getData() {
$.ajax({
url : 'example.com',
type: 'GET',
success : handleData
})
}
的success属性只需要一个函数的引用,并将该数据作为参数给此函数。
您可以访问handleData功能这样的,因为这样handleData声明。 JavaScript的将解析你的函数声明代码在运行它之前,所以你可以使用代码函数实际申报前,那是。 这就是所谓的吊装 。
这不计数声明如下功能,虽然:
var myfunction = function(){}
那些只可在翻译时与他们擦肩而过。
看到这个问题有关的声明函数的2种方式的更多信息
Answer 2:
因为jQuery的1.5(2011年1月),这样做的“新”的方式是使用强似延期对象success的回调。 您应该返回的结果$.ajax ,然后使用.done , .fail等方法来添加外的回调$.ajax调用 。
function getData() {
return $.ajax({
url : 'example.com',
type: 'GET'
});
}
function handleData(data /* , textStatus, jqXHR */ ) {
alert(data);
//do some stuff
}
getData().done(handleData);
这样可以使回调从AJAX处理处理,使您可以添加多个回调,回调失败,等等,所有甚至无需修改原始getData()函数。 从组动作之后完成分离AJAX功能是一件好事! 。
Deferreds还允许多个异步事件,你不能轻易地只是做容易得多同步success:
例如,我可以添加多个回调,错误处理程序,并等待计时器继续之前的等待:
// a trivial timer, just for demo purposes -
// it resolves itself after 5 seconds
var timer = $.Deferred();
setTimeout(timer.resolve, 5000);
// add a done handler _and_ an `error:` handler, even though `getData`
// didn't directly expose that functionality
var ajax = getData().done(handleData).fail(error);
$.when(timer, ajax).done(function() {
// this won't be called until *both* the AJAX and the 5s timer have finished
});
ajax.done(function(data) {
// you can add additional callbacks too, even if the AJAX call
// already finished
});
jQuery的其他部分使用延迟对象太 - 您可以与其他异步操作很容易与他们同步jQuery的动画。
Answer 3:
我不知道你为什么要定义的脚本之外的参数。 这是不必要的。 回调函数将返回的数据作为自动参数来调用。 这是非常可能的定义外回调sucess:即
function getData() {
$.ajax({
url : 'example.com',
type: 'GET',
success : handleData
})
}
function handleData(data) {
alert(data);
//do some stuff
}
该handleData函数将被调用,参数由AJAX功能传递给它。
Answer 4:
请尝试重写你的成功处理程序:
success : handleData
阿贾克斯方法的成功属性只需要一个对函数的引用。
在你handleData功能,您可以长达3个参数:
object data
string textStatus
jqXHR jqXHR
Answer 5:
我会写:
var handleData = function (data) {
alert(data);
//do some stuff
}
function getData() {
$.ajax({
url : 'example.com',
type: 'GET',
success : handleData
})
}
Answer 6:
经过几个小时玩它几乎变得迟钝。 奇迹来找我,它的工作。
var listname = [];
$.ajax({
url : wedding, // change to your local url, this not work with absolute url
success: function (data) {
callback(data);
}
});
function callback(data) {
$(data).find("a").attr("href", function (i, val) {
if( val.match(/\.(jpe?g|png|gif)$/) ) {
// $('#displayImage1').append( "" );
listname.push(val);
}
});
}
function myfunction() {
alert (listname);
}
Answer 7:
你并不需要声明变量。 Ajax的成功函数自动进行最多3个参数: Function( Object data, String textStatus, jqXHR jqXHR )
Answer 8:
在你的组件,即角JS代码:
function getData(){
window.location.href = 'http://localhost:1036/api/Employee/GetExcelData';
}
文章来源: jQuery ajax success callback function definition