Javascript函数未正确执行

时间:2014-06-18 16:24:35

标签: javascript jquery ajax

我有一个使用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。

1 个答案:

答案 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);

        }
    }
}