我有一个使用HTML& JavaScript,它无法正常工作。 描述错误的视频:
http://vk.com/video170263591_169020196
代码是这样的:
function load() {
$("#Load").show(0,function(){
console.log('Spinner Loaded');
});
}
function unload() {
$("#Load").hide();
console.log('Load Ended');
}
function server(datasend) {
var response;
var postURL = "http://mailsnitch.ipx-il.com/get/index.php";
$.ajax({
type: 'POST',
url: postURL,
dataType: 'json',
timeout:4000,
async: false,
data: datasend,
beforeSend : load(),
success: function(valueable){
console.log('Success');
response = valueable;
console.log(valueable);
unload();
},
error: function(jqXHR, exception) {
console.log('Error');
if (jqXHR.status === 0) {
alert('Not connect.\n Verify Network.');
} else if (jqXHR.status == 404) {
alert('Requested page not found. [404]');
} else if (jqXHR.status == 500) {
alert('Internal Server Error [500].');
} else if (jqXHR.status == 502) {
alert('Bad Gateway [502].');
} else if (exception === 'parsererror') {
alert('Requested JSON parse failed.');
} else if (exception === 'timeout') {
alert('Time out error.');
} else if (exception === 'abort') {
alert('Ajax request aborted.');
} else {
alert('Uncaught Error.\n' + jqXHR.responseText);
}
unload();
},
});
return response;
}
登录功能:
function Login(redirect) {
load();
if(redirect) {
var email = escapeHtml(document.getElementById("Login_email").value);
var password = escapeHtml(document.getElementById("Login_password").value);
} else {
if(localStorage.getItem("Email") == null) document.location.href = 'login.html';
var email = escapeHtml(localStorage["Email"]);
var password = escapeHtml(localStorage["Password"]);
}
if(email != "" && password != "") {
if(validateEmail(email)) {
var valuable = server('login=&email='+email+'&password='+password);
问题是: 加载"登录"函数,Load函数应该运行,但它没有运行。 即使函数顺序是:
负载()
server(){ 之前:load(); 而不是ajax ... }
在控制台中,我可以看到"加载成功"显示与" ajax success"完全相同的毫秒,这意味着在执行该功能之前,负载正在等待ajax加载。
帮助者的Thx。
答案 0 :(得分:3)
您立即调用该函数,而不是引用它,它应该是
$.ajax({
type: 'POST',
url: postURL,
dataType: 'json',
timeout:4000,
async: false,
data: datasend,
beforeSend : load,
....
添加括号会调用该函数并返回undefined
的结果,这是$.ajax
调用所看到的结果。
另请注意,设置async : false
会破坏异步Javascript和XML的全部目的,因为您只需将其设置为同步。
修改强>
您的代码应该看起来更像这样
function load() {
$("#Load").show();
}
function unload() {
$("#Load").hide();
}
function server(datasend) {
return $.ajax({
type : 'POST',
url : "http://mailsnitch.ipx-il.com/get/index.php",
dataType : 'json',
timeout : 4000,
data : datasend,
beforeSend : load
});
}
function Login(redirect) {
if(redirect) {
var email = escapeHtml(document.getElementById("Login_email").value);
var password = escapeHtml(document.getElementById("Login_password").value);
} else {
if(localStorage.getItem("Email") == null) {
document.location.href = 'login.html';
}
var email = escapeHtml(localStorage["Email"]);
var password = escapeHtml(localStorage["Password"]);
}
if(email != "" && password != "") {
if(validateEmail(email)) {
server({login : '', email: email, password: password}).done(function(valuable) {
// use valuable here
}).always(unload);
}
}
}