ajax完成后用角度来做东西

时间:2014-07-02 08:53:18

标签: javascript ajax angularjs

在使用angular完成ajax调用之后,我该如何处理?

请参阅此代码:

$http({
    method: 'GET',
    url: myUrl + myData
}).
success(function (data) {
    doStuff(data);
}).
error(function (data) {
    doStuff(data);
});
alert("do not alert me before running doStuff()");

我想在警告之前运行doStuff

2 个答案:

答案 0 :(得分:1)

如果doStuff是同步的(在它返回之前阻塞下一行):

$http({
    method: 'GET',
    url: myUrl + myData
}).
success(function (data) {
    doStuff(data);
    alert("do not alert me before running doStuff()");
}).
error(function (data) {
    doStuff(data);
    alert("do not alert me before running doStuff()");
});

如果doStuff是异步的(在函数返回之前执行下一行),则需要使用回调:

function doStuff(data, callback) {
   ...do the stuff here...
   callback(); // Run the callback
}

function myAlertFunc() {
     alert("do not alert me before running doStuff()");
}

$http({
    method: 'GET',
    url: myUrl + myData
}).
success(function (data) {
    doStuff(data, myAlertFunc);
}).
error(function (data) {
    doStuff(data, myAlertFunc);
});

答案 1 :(得分:1)

您可能希望最后使用' ':

http({
    method: 'GET',
    url: myUrl + myData
}).
success(function (data) {
    doStuff(data);
}).
error(function (data) {
    doStuff(data);
}).
finally(function(data){
    alert("do not alert me before running doStuff()");
});

然而'终于'是javascript中的保留字,这将在ie8上中断,因此使用它的更兼容的方式是使用括号表示法调用它

http({
    method: 'GET',
    url: myUrl + myData
}).
success(function(data){
    doStuff();
})
['finally'](function(data){
    doOtherStuff();
});

// note that there is no dot before ['finally']

查看有关角度的Promises Api的官方文档,了解更多信息:https://docs.angularjs.org/api/ng/service/ $ q