2014-04-23 70 views
0

嗨;

當我使用從jQuery ajax,頁面凍結,直到請求結束。 這是我的JavaScript代碼:

function GetAboutContent(ID, from) { 
var About = null; 

if (from != true) 
    from = false; 

$.ajax({ 
    type: "POST", 
    url: "./ContentLoader.asmx/GetAboutContent", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    data: JSON.stringify({ 'ID': ID, 'from': from }), 
    async: true, 
    success: function (msg) { 
     var Result = msg.d.Result; 

     if (Result == 'session') { 
      warning('Your session has expired, please login again!'); 
      setTimeout(function() { 
       window.location.href = "Login.aspx"; 
      }, 4000); 
      return; 
     } 

     if (Result == 'failed' || Result == false) { 
      About = false; 
      return; 
     } 

     About = JSON.parse(msg.d.About)[0]; 
    } 
}); 

return About; 

}

,這是我WebService

[WebMethod(EnableSession = true)] 
public object GetAboutContent(int ID, bool from = false) 
{ 
    try 
    { 
     if (HttpContext.Current.Session["MahdParent"] != null || 
      HttpContext.Current.Session["MahdTeacher"] != null || 
      from) 
     { 
      functions = new GlobalFunctions(); 
      DataTable queryResult = new DataTable(); 

      queryResult = functions.DoReaderTextCommand("SELECT Field FROM TT WHERE ID = " + ID); 
      if (queryResult.Rows.Count != 0) 
       return new { Result = true, About = JsonConvert.SerializeObject(queryResult.Rows[0].Table) }; 
      else 
       return new { Result = false }; 
     } 
     else 
      return new { Result = "session" }; 
    } 
    catch (Exception ex) 
    { 
     return new { Result = "failed", Message = ex.Message }; 
    } 
} 

我怎麼能解決這個問題? 請幫我

+0

你***不能***返回一個**異步**函數的結果 – adeneo

+0

可能重複[如何從AJAX調用返回響應?](http://stackoverflow.com/questions/ 14220321 /如何返回迴應從一個阿賈克斯調用) – adeneo

+0

你的意思是我應該設置'async'爲'false' –

回答

1

在最後一行你試着返回About。由於AJAX請求的異步性質,這是行不通的。當您的AJAX請求的成功函數運行時,您所處狀態return About的位置不再存在。

我假定你試着做做服用點是這樣的:

$('div#content').html(GetAboutContent()); 

在像PHP或Perl程序性lantuage這工作得很好,但在一個非常不同的方式JavaScript函數。爲了使這樣的工作,你會做這樣的事情:

$.ajax({ 
    type: "post", 
    url: "./ContentLoader.asmx/GetAboutContent", 
    dataType: "json", 
    data: { 
     'ID': ID, 
     'from': from 
    }, 
    success: function(result) { 
     $('div#content').html(result) 
    } 
}); 

代碼的兩個比特之間的區別在於,第一所期望的JavaScript知道你在提出申請的時間價值。但是,您的功能GetAboutContent()不能即時訪問這些數據。相反,它啓動了一個AJAX請求,並在請求仍在進行之後結束,但時間不確定。

一旦請求成功完成,數據就可用於JavaScript。並且您可以在爲success定義的回調函數中使用它。那時請求與啓動它的函數完全沒有連接。這就是爲什麼它是異步的。

相關問題