javascript无法正常工作if-else

时间:2015-10-09 09:47:42

标签: javascript jquery function api asp.net-web-api

我有保存时验证重复名称的表单,我使用webapi进行处理。以下是一个示例函数,它通过onclick="return validateName()"从按钮单击调用。

function validateName() {
    var nam = $('#frmeditCategory input[id="Name"]').val();
    var result = false;
    $.ajax({
        type: "POST",
        url: "/Admin/CategoryName",
        data: { Name: "test"},
        dataType: "json",
        success: function (response) {
            if (response.message == true) {
                alert("Category already exists.");
                result = false;
                alert(0);
                return false;
            }
            else {
                result = true;
                alert("1");
                return true;
            }
        },
        error: function (xhr, ajaxOptions, thrownError) { alert("some error occured"); result = false; }
    });
    alert("2");
    return false;
}

首先执行alert("2");然后执行ajax。我很困惑,我不知道我做错了什么。请帮帮我们!!!

3 个答案:

答案 0 :(得分:2)

alert("2")需要放在$.ajax承诺回调中:

$.ajax({
    type: "POST",
    url: "/Admin/CategoryName",
    data: { Name: "test"},
    dataType: "json",
    success: function (response) {
        if (response.message == true) {
            alert("Category already exists.");
            result = false;
            // Why are the following here, they will never get called?
            // alert(0);
            // return false;
        } else {
            // Why is this line here, you never use it?
            // result = true;
            alert("1");
            return true;
        }
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert("some error occured");
        result = false;
    }
}).done(function () {
    alert("2");
});

答案 1 :(得分:1)

ajax调用是异步请求。当您调用方法时,您正在启动请求。但是,请求可能需要一段时间才能完成,直到您从服务器获取数据或发生错误。

当数据从服务器到达时,执行ajax中的函数,这就是为什么此警报仅在警报(“2”)之后完成;

答案 2 :(得分:1)

默认情况下,Ajax调用是异步的,这意味着代码执行不会停止等待ajax调用返回,而是在http请求返回并且调用了ajax回调之前很久就会继续并到达alert(2)语句。 / p>

您也可以执行同步ajax调用,但这通常不是一个好主意,因为其他内容会在调用返回之前冻结。