2013-05-27 79 views
0

我想執行ajax調用,並在代碼運行之前阻止代碼,直到ajax調用完成。阻止代碼運行,直到ajax完成

說我有這樣的代碼

.on('pageloadfailed', function(event){ 

    //if I move event.preventDefault to here the popup doesn't show. But I only want 
    //to prevent the default bahaviour if the condition in the ajaxe response if met. 

    $.when(ajax1()).done(function(response){ 
     if(resposne.success == true){ 
      event.preventDefault(); 
     } 
    }); 

    function ajax1() { 
     return $.ajax({ 
      url: "someUrl", 
      dataType: "json", 
      data: yourJsonData,    
      ... 
     }); 
    } 

    alert("test"); 

} 

警報總是會火,我只希望它如果內碼「時,」方法不返回虛火。

非常感謝你們的回覆,我會再深入一點。

我正在使用jquery mobile。當頁面加載失敗時,jqm會彈出一個告訴用戶刷新的彈出窗口。但是在某些情況下,我不希望發生這種情況,我實際上想自己處理這個錯誤。

所以,當pageloadfailed事件被解僱時,我並沒有通過ajax來檢查某些東西。在某些情況下,我會處理髮生的事情,但在其他情況下我只想繼續。

該警報實際上並沒有在我的代碼中,我只是試圖用它來說明這一點。

+0

你找到足夠的回答你的問題嗎?如果是這樣,請將其標記爲已接受的答案 – enyce12

回答

-1

我會使用$ .when()函數。

$.when(ajaxFunction()).done(function(response){ 
    if(response.text != "false"){ 
     alert("test"); 
    } 
}) 

function ajaxFunction() { 
    return $.ajax({ 
     url: "someUrl", 
     dataType: "json", 
     data: dataInJson,    
    }); 
} 
代碼

上面我用response.text,但它是一個猜測 - 我不記得它的響應結構的樣子,你究竟怎麼檢查自己。我所知道的是它由3個參數組成,響應的文本就是其中之一。

+0

請查看我對原文的編輯。謝謝 –

+0

$ .when是異步函數,它不會在你的.on('pageloadfailed')中被順序觸發。事件將會在event.preventDefault()被激怒之前完成。 –

+0

有沒有什麼辦法可以在時間之前防止默認,然後在條件內「重新啓用」它? –

2

只是把歸屬asyncfalse

從jQuery的ajax

異步(默認值:true)

類型:Boolean

默認情況下,所有的請求都是異步發送(即默認設置爲 )。如果您需要同步請求,請將此選項設置爲 false。

+1

'從jQuery 1.8開始,不贊成使用jqXHR($ .Deferred)的async:false' – enyce12

2

使用successerror回調:

$.ajax({ 
     url: "someUrl", 
     dataType: "json", 
     data: yourJsonData, 
     success: function() { 
      doSomethingOnSuccess(); 
     }, 
     error: function() { 
      doSomethingOnError(); 
     } 
    }) 
0

如果長得像你幾乎有:

function ajax1() { 
    return $.ajax({ 
     url: "someUrl", 
     dataType: "json", 
     data: yourJsonData,    
     ... 
    }); 
} 

$.when(ajax1()).done(function(){ 
    alert("this should run when your AJAX call is completed. Put your code here"); 
}); 
相關問題