我在下面的javascript中遇到问题,其中$.ajax
调用未被调用。 alert('foo')
确实发生了,但是完全跳过了数据调用并且从未到达回调(永远不会得到alert('success!')
。我不完全理解回调,但这似乎应该有效。< / p>
修改
编辑脚本到我目前的位置,因为我读过这种方式是更好的做法。不过,我可以介入authenticate()
,它会在url:[...]
上中断,但实际上从未实际进行过ajax调用。我试图删除返回只是为了看看是否存在问题,但它产生了相同的结果。
define(["jQuery", "kendo", "modernizr", "app/environment"], function ($, kendo, modernizr, environment) {
var authenticate = function (username, password) {
return $.ajax({
url: environment.apiConnection + '/canlogin?userid=' + username + '&password=' + password,
type: 'get',
dataType: 'jsonp'
});
}
var canLogin = function(data) {
alert('good');
}
return {
viewModel: kendo.observable({
username: null,
password: null,
authenticate: function () {
var username = this.get('username'),
password = this.get('password');
authenticate(username, password).done(canLogin);
}
})
}
});
答案 0 :(得分:1)
改为使用回调。
var canLogin = function (username, password, callback) {
$.ajax({
async: false,
url: config.apiConnection + '/canlogin?userid=' + username + '&password=' + password,
type: 'GET',
dataType: 'jsonp',
error: function (x, t, r) {
alert('Error');
},
success: callback
});
}
// use
canLogin("user","passwd",function( data ){
alert("Im called on authentication success!");
});
答案 1 :(得分:1)
解决方案是e.preventDefault()
的混合,并在ajax调用中使用回调。仅使用回调并未解决问题,但将preventDefault
添加到authenticate
功能并修复了回调问题。
最终的工作版本现在看起来像这样:
define(["jQuery", "kendo", "modernizr", "app/environment"], function ($, kendo, modernizr, environment) {
function authenticate(username, password, callback) {
$.ajax({
url: environment.apiConnection + '/canlogin?userid=' + username + '&password=' + password,
type: 'get',
dataType: 'jsonp',
success: callback,
error: function (x,t,r) {
console.log('error')
}
});
}
function login(canLogin, username, password) {
if (canLogin == false) {
alert('Incorrect username or password');
return;
}
alert('good');
}
return {
viewModel: kendo.observable({
username: null,
password: null,
authenticate: function (e) {
e.preventDefault();
var username = this.get('username'),
password = this.get('password');
authenticate(username, password, function (canLogin) {
login(canLogin, username, password);
});
}
})
}
});