2015-06-09 55 views
2

我想給一個變量傳遞到jQuery的Ajax請求:如何JavaScript變量傳遞給jQuery的Ajax請求

$(document).ready(function() { 
      // get page number 
      var page = parseInt(getUrlParameter('page')); 
      if (page < 1) page = 1; 
      var page_next = page + 1; 

      $.ajax({ 
       type: "GET", 
       data: { 
        page: page, 

       }, 
       dataType: 'json', 
      ... 

可惜的變量「頁面」似乎不存在Ajax請求中。做一個cosole.log(頁面);裏面有「NaN」作爲價值。

的問題似乎是

if (page < 1) page = 1; 

如果通過GET檢索該值不存在,那麼頁面將是非。

如何確保頁面始終定義爲最小1?

+3

該方法是絕對正確的,該錯誤可能是函數getUrlParameter('page')',它不返回一個有效的響應(或不是一個數字或任何可以轉換成這樣的數據)。你能告訴我們這個功能嗎? – briosheje

+1

從迄今爲止共享的代碼中,該方法的唯一問題是[您在parseInt上沒有基數](http://stackoverflow.com/questions/6611824/why-do-we-需要使用radix),但這不會導致這個問題。無論getUrlParameter返回的是什麼,正如briosheje所說的,不是可以轉換爲數字的東西,因此:NaN:不是數字 – Quentin

+0

這個問題似乎與getURLParameter函數一樣,正如上面的人指出的那樣。嘗試使用var page = 1;並查看變量是否包含值1. –

回答

1

你​​是返回的東西是不能轉換爲數字NaN = Not a Number,如果你分享功能也許我們可以進一步調試一點點你的問題的根本原因,在此期間,我建議以下驗證:

var page = parseInt(getUrlParameter('page')); 
if (page < 1 || isNaN(page)) page = 1; 
var page_next = page + 1; 

這樣,如果你的頁面不是一個數字,你默認它爲第1頁。 希望這可以清除事情並幫助你。

+0

這很好,但我寧願說他應該修正getUrlParameter而不是結果。我的意思是,結果應該是一個數字,所以他應該在**函數中而不是在它後面聲明,特別是從我們不知道他是如何/從何處獲取這些數據的時刻,對嗎? – briosheje

+0

這就是爲什麼我編輯了我的問題。如果他不共享這個函數,那麼就沒有辦法找到根本原因,所以我只是提出了一個建議,以使代碼更加健壯。如果用戶輸入除數字以外的任何url,那麼應用程序加載第1頁而不是崩潰或顯示錯誤會很好。 – taxicala

+0

這導致了正確的方向。如果我離開parseInt內部工作。如果我刪除它,頁面+ 1會顯示11而不是2. – merlin

1

如果你的問題是,如果語句中,最快的解決方案,我能想到的(儘管我不贊成它)是這樣的一個:

替換:

var page = parseInt(getUrlParameter('page')); 

有:

var page = +getUrlParameter("page") || 1; 

如果頁面爲falsey(NaN爲falsey),它會將其設置爲1,否則將其設置爲其結果。

例如用小提琴:

function getUrlParameter (param) { 
    return param === "page" ? 5 : false; 
} 

var page = +getUrlParameter("hello") || 1; 
alert(page); 

page = +getUrlParameter("page") || 1; 
alert(page); 

http://jsfiddle.net/51tvdsve/

在任何情況下,你應該應該努力解決您的getUrlParameter功能,而不是試圖避免它的輸出,不過這只是我的看法。