我有ajax
请求的容器方法:
function postRating(formData) {
$.ajax({
type: "POST",
url: '/api/ratings',
data: formData
})
.done(function () {
return true
})
.fail(function () {
return false
})
.always(function (msg) {
//console.log(msg);
});
}
这样称呼:
$('.episode-rating.like').click(function () {
var formData = $("#episode-rating").serializeArray();
formData.push({name: 'up', value: 1}, {name: 'down', value: 0});
console.log(postRating(formData))
});
但postRating()
会返回undefined
。不知道我做错了什么。如果ajax请求成功,我想做一些html处理,否则显示错误。
答案 0 :(得分:2)
如上所述它是异步的,所以使用回调:
function postRating(formData, cb) {
$.ajax({
type: "POST",
url: '/api/ratings',
data: formData
})
.done(function () {
cb(true);
})
.fail(function () {
cb(false);
})
.always(function (msg) {
//console.log(msg);
});
}
然后:
postRating(formData, function(result){
console.log(result);
})
或者您可以使用承诺:
function postRating(formData, cb) {
return $.ajax({
type: "POST",
url: '/api/ratings',
data: formData
});
}
然后:
postRating(formData)
.done(function(){
console.log(true);
})
.fail(function(){
console.log(false);
});
答案 1 :(得分:0)
这是异步调用。如果你想要你可以使你的ajax调用同步,然后你可以从容器返回,否则你必须在容器上实现回调,这些回调在成功,错误和完成时被调用。
// Async = false
function postRating(formData) {
return $.ajax({
type: "POST",
url: '/api/ratings',
data: formData,
async: false
});
}
// Callbacks
function postRating(formData, successCallback) {
$.ajax({
type: "POST",
url: '/api/ratings',
data: formData,
success: function (data) {
successCallback.apply(this, [data]);
}
});
}