2011-11-03 38 views
0

試圖做一些簡單的任務,但找不到解決方案。我正在嘗試設置一個名爲$ .get請求之外的變量,但它似乎是在設置。

這裏是我的代碼:

$(document).ready(function() { 
      var totalPages 
      var currentPage = 1; 
      //this $.get returns a number 
      $.get('getTotalPages.php', function(data) { 
       totalPages = data; 
      }); 
      //just an example of applying the result to something else 
      if (currentPage < totalPages) { 
       ... do something... 
      } 
     }); 

任何想法?

回答

1

我認爲你正在尋找這樣的:

$獲得()是異步的,但這只是全$阿賈克斯()函數,您可以設置爲同步,輕鬆地獲取responseText屬性的簡寫。

$(document).ready(function() { 
    var totalPages; 

    totalPages = $.ajax({ 
    url: 'getTotalPages.php', 
    async: false 
    }).responseText; 
}); 

注意同步reque st強制腳本等待響應,所以在請求處於活動狀態時其他動作將被禁用。

+0

完全正確!非常感謝 – NightMICU

+0

這只是使用成功處理程序的簡短手段,並不是異步的原因是不是最好的做法,並在一個領域,有很少開始啓動 – SipSop

+0

我試圖將一個非常複雜的分頁結果集(長故事)轉換爲JSON我只需要總數分頁結果知道何時顯示或隱藏Prev和Next鏈接。 getTotalPages.php文件根據表中的行數和每頁的行數返回總頁數。以上是可接受的解決方案嗎?似乎工作.. :) – NightMICU

2

$.get()聲明是異步的。這意味着它不會立即完成,但您正嘗試立即使用totalPages返回值。實際上,在調用成功處理程序之前,您不能使用它返回的數據。在你的例子中,你啓動$.get()命令(它剛剛啓動它),然後立即使用totalPages,但是totalPages尚未設置,因爲$.get()尚未完成,所以設置totalPages的成功處理程序尚未被調用。

任何使用$.get()的答案的工作都必須在成功處理程序本身(或其調用的函數)中完成,因爲只有這樣才能知道結果是可用的。

你的代碼改成這樣,看看它的工作(假設你的get()實際工作:

$(document).ready(function() { 
    var totalPages; 
    //this $.get returns a number 
    $.get('getTotalPages.php', function(data) { 
     totalPages = data; 
     //just an example of applying the result to something else 
     if (currentPage < totalPages) { 
      ... do something... 
     } 
    }); 
    // code executed here will execute before the $.get() command has completed 
}); 
+0

文字的變化是一個不好的例子,我應該進一步細化。我需要將頁面的數量(由'$ .get'返回)傳遞給行後面的'if ... else' – NightMICU

+0

你不能這樣編碼,你必須繼續處理'$ .get()是成功處理程序本身的結果,或者是你從成功處理函數調用的其他函數的結果,你必須構造你的代碼來使用異步ajax調用,你不能像你嘗試使用異步ajax那樣進行順序編程 – jfriend00

+0

我修改了我的答案中的代碼,告訴你if語句必須去的地方 – jfriend00

0

當瀏覽器接收到ajax請求時,必須完成它。該$不用彷徨方法告訴你這個成功的基礎上功能

$.get(
{ 
    'url' : 'someUrl.html', 
    'success' : function(data) 
    { 
     totalPages = data; 
     if(totalPages == 1) //do stuff 
     else   // do other stuff 
    } 
}); 

或外面創建函數和寫「成功」:functionName。無論哪種方式,它必須得到處理,如上所述,但我沒有看到在代碼中,從服務器返回響應後。