2012-05-30 70 views
3

我有一個jQuery $ .ajax調用,在所有主流瀏覽器中都能正常工作。ajaxStart忽略Google Chrome中的.show()

此外,我利用.ajaxStart和.ajaxStop函數使 在我的網頁上顯示爲「正在加載...」的不可見div,可見。

的問題是,雖然兩者ajaxStart和.ajaxStop,事件觸發 沒有任何問題(我檢查從執行console.log()),jQuery的在ajaxStart的.show事件 是completelly谷歌瀏覽器忽略。

下面是代碼:

$("#loadMsg").ajaxStart(function(){ 
    console.log('ajaxstart'); 
    // the next command is ignored ONLY in Google Chrome 
    $(this).show(0); 
}); 

$.ajax({ 
    url:"xxx.php", 
    type:"POST", 
    data:"id="+id, 
    async:false, 
    success:function(data) 
    { 
    console.log(data); 
    } 
}); 

$("#loadMsg").ajaxStop(function(){ 
    console.log('ajaxfinish'); 
    $(this).hide(0); 
}); 

我已經嘗試過:

$("#loadMsg").show(0); 
$("#loadMsg").fadeIn(); 
$("#loadMsg").css("display","block"); 
$("#loadMsg").css("display","inline"); 

任何建議將非常感激。

+0

看起來這段代碼在工作http://jsfiddle.net/dBSD7/。我刪除了異步:false,因爲不知道爲什麼你想成爲那個。 :)另外,爲你的暱稱+1 :) –

+0

我知道這是工作,如果異步:真,但...我期待從ajax請求的一些數據,然後繼續其餘的代碼。我沒有暴露整個代碼在成功參數(對不起) – Portishead

回答

0

經過兩天的努力,我終於找到了解決方案。 我上面發佈的整個代碼是在一個函數內,它通過成功屬性返回xxx.php的結果到主代碼。

問題是,當我使用async:true選項時,函數立即返回值而不等待ajax完成請求。 所以返回的值總是一個「未定義」的值,而不是xxx.php的正確結果。

解決方案運行ajax異步並僅在完成ajax請求時繼續執行其餘代碼,是將整個代碼放入成功參數中。

我會盡量說清楚用下面的例子:

代碼沒有奏效:

function foo() 
{ 

if call_ajax_request()=="true" 
    { 
    //execute code A 
    // never had the chance to be executed because call_ajax_request() 
    // was always undefined 
    } 

} 



function call_ajax_request() 
{ 

    var return_value; 

    $.ajax({ 
    url:"xxx.php", 
    type:"POST", 
    data:"z="+y, 
    success:function(data) 
    { 
      return_value = data; 
     } 
    }); 

    //return_value was always "undefined" because the flow didn't wait 
    // for ajax to complete (async mode) 
    return return_value; 
} 

代碼,終於做了工作:

function foo() 
{ 

    $.ajax({ 
    url:"xxx.php", 
    type:"POST", 
    data:"z="+y, 
    success:function(data) 
    { 
      return_value = data; 

      //here, the following code won't be executed 
      //as long as ajax hasn't been completed. 

      if (return_value=="true") 
      { 
       //execute code A 
      } 
     } 
    }); 

} 
0

你不能用async:false來做到這一點,這會導致瀏覽器掛起,直到請求完成。不要嘗試使用async:false,我建議您考慮重新構建項目,以使其異步工作。

+0

但它適用於所有其他瀏覽器。只有谷歌的Chrome有此行爲。感謝您的答覆和您的建議。 – Portishead

+0

問題是,我期待從發送給xxx.php的ajax請求獲得「真」或「假」值。 如果我省略async:false屬性...執行不等待php結果(這對於其餘的程序是至關重要的),並繼續執行AS IF xxx.php發送「false」作爲返回值。 如果async = true,我該如何強制ajax請求等待執行? – Portishead