我正在创建一个非常大的脚本,所以我采用面向对象的javascript方法。 当试图使用jQuery的ajax时(或者之前是文档准备的简写)它没有被解雇,我不知道为什么。
(将整个文档就绪代码复制粘贴到chrome控制台中显示ajax调用确实有效,但它只是不在子函数内运行)
我的代码:
// Main class
function Arina(loginstate) {
var loginstate = loginstate;
}
/**
* attempts to log the user in
* @
* @param {string} username [user's username]
* @param {string} password [user's password]
* @return {array} [status, message]
*/
Arina.prototype.login = function(username, password) {
/**
* Validate if the user has filled in all required fields
*/
if (username == '' || username == null) return [false, 'No username given.'];
if (password == '' || password == null) return [false, 'No password given.'];
/**
* Set up ajax payload
*/
var payload = {
username : username,
password : password,
unhashed : true
}
/**
* Document ready for jQuery
*/
$(document).ready(function(){
/**
* Make ajax call to check credentials
* @param {object} 'payload' [Form data]
*/
$.ajax({
url : '/arina/app',
type : 'POST',
data : payload
}).always(function(response, status, xhr){
if (response == 'success') {
return [true, 'Login successful.'];
} else {
return [response, status, xhr];
}
console.log("I'm not getting fired!!"); // Code ever reaches this.
});
/**
* Catch jQuery ajax error
* @param {object} event
* @param {object} xhr
* @param {object} settings
* @param {string} thrownError
* @return {array}
*/
$(document).ajaxError(function(event, xhr, settings, thrownError) {
if (xhr.status == 401) return [false, 'Invalid username or password.'];
if (xhr.status == 500) return [false, 'Internal server error, please contact an administrator.'];
});
});
}
// I call the method once the script has been loaded (along with the rest of the JS files)
var arina = new Arina(1);
arina.login('test', 'test');
子函数DOES触发ajax,但从不调用回调函数。
答案 0 :(得分:2)
console.log("I'm not getting fired!!");
因为它上面的返回语句。
这是一个working example
两个主要变化:
$.ajax
的回调函数已更正$(document).ready
已删除其他信息:
而不是:
$.ajax({
url : '/arina/app',
type : 'POST',
data : payload
})
你可以使用:
$.post('/arina/app', data)
代替always
并检查您可以使用的结果:
.done(function() {
// handle success
})
.fail(function() {
// handle fail
})