Javascript 将一个简单的ajax调用转换为使用promise jQuery/AngularJS
我有一种在应用程序中使用AJAX调用的通用方法:Javascript 将一个简单的ajax调用转换为使用promise jQuery/AngularJS,javascript,jquery,ajax,angularjs,promise,Javascript,Jquery,Ajax,Angularjs,Promise,我有一种在应用程序中使用AJAX调用的通用方法: function doAjaxCommand(url, type, async, params, successCallback, failCallback) { $.ajax({ url: url, type: type, async: async, dataType: "json", data: JSON.stringify(params)
function doAjaxCommand(url, type, async, params, successCallback, failCallback) {
$.ajax({
url: url,
type: type,
async: async,
dataType: "json",
data: JSON.stringify(params)
contentType: "application/json; charset=utf-8",
success: function(result) {
if (result.Success) {
successCallback(result);
} else {
if (failCallback !== undefined) {
failCallback(result);
}
return false;
}
},
error: function(xhr, status, error) {
console.log(xhr.responseText);
console.log(xhr);
console.log(status);
}
});
}
我听说使用承诺可以更好地利用异步操作。然而,我不知道如何使用承诺。我从来没有使用过它,我也没有在我读到的一些链接中了解到它的全部意思。你们能告诉我一件事吗?甚至如何开始思考
任何帮助都将不胜感激,谢谢 实际上,承诺允许一种更好的方式“组合”回调。常规回调通常会导致“末日金字塔”
step1(function (value1) {
step2(value1, function(value2) {
step3(value2, function(value3) {
step4(value3, function(value4) {
// Do something with value4
});
});
});
});
相反,承诺允许扁平化的呼叫流。例如:使用q.js()我们可以
Q.fcall(promisedStep1)
.then(promisedStep2)
.then(promisedStep3)
.then(promisedStep4)
.then(function (value4) {
// Do something with value4
})
.catch(function (error) {
// Handle any error from all above steps
})
.done();
jquery还支持promise样式
var jqxhr = $.getJSON( "example.json", function() {
console.log( "success" );
})
.done(function() {
console.log( "second success" );
})
.fail(function() {
console.log( "error" );
})
.always(function() {
console.log( "complete" );
});
但是,你应该使用内置的Angularjs承诺。我发现这是最好的解释Angularjs承诺的方式: 如果您计划定期与后端进行REST交互,我建议您 在angularjs中,如果要使用默认的
$http
,请参考Angular的文档:
$http({method: 'GET', url: '/someUrl'}).
success(function(data, status, headers, config) {
// this callback will be called asynchronously
// when the response is available
}).
error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});
这暴露了承诺成功
和错误
或者你可以
$http({method: 'GET', url: '/someUrl'}).
then(function(data, status, headers, config) {
// this callback will be called asynchronously
// when the response is available
$scope.users = response.users;
})
它公开了当aync完成时的
承诺,然后做一些事情 在$.ajax之前添加return
(
。就是这样。试着阅读这篇文章,它谈到了如何使用$q库:你几乎肯定不应该将jQuery与Angular一起使用。使用Angular的$http
服务。呃……在$.ajax`之前放一个返回
,它已经使用了承诺,你只要用钩住它们就可以了。然后,
。还有,m59所说的在这里和这里重新描述jQuery的。完成。失败。总是等都不像Q的承诺“。然后
或Angular的承诺,因为它们不连锁。相反,你可以将其与jQuery自己的。然后
@BenjaminGruenbaum同意Q和Angular的承诺更优越是一篇好的文章我只是提到jquery支持承诺“风格”并不是说这些都是符合+承诺的。使用$http
AngularJS对象的好方法,但是有没有像jQuery Ajax调用那样的beforeSend
属性?给出了答案。有相关文档。我个人没有使用过。我自己也没有拦截器,但了解它会很有趣信息技术