2011-05-31 41 views
0

這是字符串的參數部分,因爲我需要它之前逃脫空白:需要追加到URL

?parentId=PRICE&childId=%20LIST 

這是因爲它是參數部分(注意失蹤%20):

?parentId=PRICE&childId=LIST 

這裏是從兩個選擇框(#parentCodes和#childCodes)採集數據的功能:

  function ajaxCodeDetails(){ 
       $.getJSON(
       "manage-inventory-codes_codeDetails", 
       {'parentId': $("#parentCodes").val(), 
        'childId': $("#childCodes").val()}, 
       renderDetails 
      ); 
      } 

如何在發送請求之前轉義val()返回的結果?

+0

默認情況下,jQuery正在轉義數據。如果你沒有按照你想要的方式得到它,它似乎也在修整數據。 – 2011-05-31 21:23:37

+0

是的,它正在修剪「」的領先空間,這是不可接受的。 – Quaternion 2011-05-31 21:27:54

+0

我必須修改我的評論。 jQuery不參與這個請看我的答案。 – 2011-05-31 21:35:42

回答

3

這不是與jQuery但與形式的問題。看來,開頭和結尾的空格在該選項的文本被忽略(顯然,這是瀏覽器的正常行爲,見下文):

<select name="foo"> 
    <option> space</option> 
    <option>space </option> 
</select 

DEMO

但它的作品,如果它們被設置爲value小號:

<select name="foo"> 
    <option value=" space"> space</option> 
    <option value="space ">space </option> 
</select> 

DEMO


HTML規範有一個關於文本的有趣的章節,in particular about white space。有說:

爲了避免現存的實現之間有SGML line break rules的問題和矛盾,作者不應該依賴於用戶代理開始標記後立即或馬上結束標記之前呈現空白。因此,作者,特別是創作工具,應該寫:

<P>We offer free <A>technical support</A> for subscribers.</P> 

,而不是:

<P>We offer free<A> technical support </A>for subscribers.</P> 

如此看來,大多數瀏覽器遵守這一規則,而忽略那些空間。

+0

由於數據是用JSON獲得的,我可以通過準備選項的功能簡單地添加解決所有問題的必需屬性。善於發現我的疏忽。 – Quaternion 2011-05-31 21:56:45

0

試試這個:

function ajaxCodeDetails(){     
    $.getJSON(     
     "manage-inventory-codes_codeDetails",{ 
      'parentId': $("#parentCodes").val().replace(/^\s+/g, ""), 
      'childId': $("#childCodes").val().replace(/^\s+/g, "") 
     },     
     renderDetails    
    );    
} 
0

您不需要編碼URL什麼。 jQuery會照顧到這一點。 %20表示一個url編碼空間。所以簡單地在你的文本框中放一個空格,它將被正確處理。你的代碼非常好。

+0

它來自選擇框。目前它沒有照顧它。 – Quaternion 2011-05-31 21:24:46

+0

@Quaternion,這可能是由於你的組合框的值如何。你的jQuery代碼很好,不應該被觸及。這是使用'$ .getJSON'函數發送參數的正確方法。如果你沒有得到想要的結果,*希望的*違反了HTTP規範或者問題在其他地方。 – 2011-05-31 21:28:02

+0

Firebug顯示選項值包含具有前導空格的單詞列表。如果我追加第一個查詢字符串,那麼我得到所需的結果,如果我提交第二個,那麼我得到錯誤的結果......顯然它在HTTP規範內。 – Quaternion 2011-05-31 21:34:15

1

您可以使用內置的encodeURI()功能...

{'parentId': encodeUri($"#parentCodes").val(), 
+0

+1瞭解何時使用js over jquery。當你不能讓jquery爲你處理編碼時,這是最好的方法。 – BumbleB2na 2011-05-31 21:27:53

1

HTML忽略<option>標記中的前導和尾隨空白。用&nbsp;替換前導空格和尾隨空格,以便瀏覽器將其正確解釋爲空格。你會想在服務器上這樣做。根據不同的語言,可能有一種方法可以爲你做這種轉換。

+0

該帳戶的解決方案將工作,但因爲我得到JSON返回felix klings解決方案是一個更接近。感謝您的幫助。 – Quaternion 2011-05-31 21:54:58