2011-05-03 63 views
8
$("#submit").click(function() { 
    var boolError = false; 

    CheckForm("#email"); 
    CheckPhone("#phone"); 

    if (boolError == true) { 
     console.log('error'); 
    } else { 
     console.log('here'); 
     // $("#form").submit(); 
    } 
}); 

問題之前等待的jQuery AJAX的迴應是,它總是返回console.log('here');如何選擇條件

有沒有辦法等待CheckForm和CheckPhone。從CheckForm功能AJAX調用:

$.ajax({ 
    type: "POST", 
    url: "/webservice/user.asmx/CheckForm", 
    data: "{'type':'" + var_type + "', 'value':'" + var_value + "'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    error: function (XMLHttpRequest, textStatus, errorThrown) { }, 
    success: function (data) { 
     var obj = data.d; 
    } 
}); 

回答

16

嘗試設置 async爲false: 見編輯下面

$.ajax({ 
    type: "POST", 
    async: false, 
    url: "/webservice/user.asmx/CheckForm", 
    data: "{'type':'" + var_type + "', 'value':'" + var_value + "'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    error: function (XMLHttpRequest, textStatus, errorThrown) { }, 
    success: function (data) { 
     var obj = data.d; 
    } 
}); 

這將使得AJAX呼叫阻塞,因此瀏覽器將等待它繼續之前完成。當然,我仍然不確定這是如何與在父條件中檢查的布爾值相關的。也許有代碼,你不向我們展示了......


編輯: :::感嘆:::我當時年幼無知的時候我張貼了這個答案,其實已經忘記了這一切。我將以上信息保留爲歷史用途(因爲它似乎幫助了一些人,或者至少他們認爲它已經),但明白這是不是正確的做法

使異步調用同步和阻止執行在每個方面都是不正確的。不要這樣做。相反,構建邏輯以響應異步操作。在這個問題的情況下,調用console.log()應該發生在AJAX調用的成功(或錯誤)處理程序中,而不是在調用該調用之後的代碼中。

7

你必須這樣做,從AJAX調用回調 - 這樣的:

$.ajax({ 
    type: "POST", 
    url: "/webservice/user.asmx/CheckForm", 
    data: "{'type':'" + var_type + "', 'value':'" + var_value + "'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     console.log('error'); 
    }, 
    success: function (data) { 
     console.log('here'); 
    } 
}); 

使用AJAX需要非線性規劃 - 回調比比皆是。

您可以在ajax調用中設置選項,使其不會異步(即jQuery將等待它完成),但這會使您的應用程序/網站無法正常運行。

+0

正確的。編程JavaScript和AJAX時,使用回調是必須的。 – Tadeck 2011-05-03 10:32:17

1

是的,你把有條件的成功函數。

success: function (data) { if (...) { } else { }   

var obj = data.d; 
    } 
1

其中u集boolError=true ?? dats爲什麼它總是返回這裏;

ü必須改變這樣的邏輯checkForm

$.ajax({ 
    type: "POST", 
    error: function (XMLHttpRequest, textStatus, errorThrown) { boolError==true;}, 
    success: function (data) { 
     var obj = data.d; 
    } 
});