2014-02-26 20 views
1

我試圖將多個參數值對追加到ajax請求的url。我知道這應該是使用& amp;而不是&。那爲什麼第一個功能起作用,第二個功能失敗?Javascript &不會追加下一個參數值對

function accountByName(firstName, lastName, resultRegion) { 
    var baseAddress = "Bank"; 
    var data = "firstName=" + getValue(firstName) + "&lastName=" + getValue(lastName); 
    var address = baseAddress + "?" + data; 
    ajaxResult(address, resultRegion); 
} 

function accountByName(firstName, lastName, resultRegion) { 
    var baseAddress = "Bank"; 
    var data = "firstName=" + getValue(firstName) + "&lastName=" + getValue(lastName); 
    var address = baseAddress + "?" + data; 
    ajaxResult(address, resultRegion); 
} 

當我在服務器端java代碼打印報表中的firstName變量打印精細,但是當我使用&放大器姓氏變量總是回來空;當我使用&時,這兩個變量的打印效果都很好,但我知道這是不正確的XML。

+1

爲什麼你會期待「&」的工作?我不明白。 URL語法與HTML語法無關。 – Pointy

+0

'我知道這應該是使用&而不是'無論你在哪裏閱讀 - 這是錯誤的。 – Adam

+0

我想我可能已經複雜了。我的導師說:「如果你在xhtml中有一個」&「,你需要 替換爲」&「這讓我覺得我需要使用&,但我以前從未這樣做過。他意味着什麼時候它需要被解析爲XML,而不是一個URL。我繞了一圈,找到了在url中使用&的人的例子,所以我認爲只是使用&必須是不正確的。我認爲這些例子一定是非功能代碼 – sage88

回答

2

因此,這裏是你的導師的意思:

在(X)HTML頁面,如果你有這樣的:

<a href="http://example.com/?query=string&with=parameters">Link</a>

您應該使用(即使它真的沒有一個除了給校驗差)

<a href="http://example.com/?query=string&amp;with=parameters">Link</a>

這是只有時間您應該在查詢字符串中使用&amp;

+0

這是我需要清理的東西。至於你上面的評論關於爲什麼有人會在html5存在的時候打擾xhtml,我不認爲這是上面例子中的有效評論。在html5中,在執行上述操作時,您仍然應該使用&。 http://stackoverflow.com/questions/3493405/do-i-really-need-to-encode-as-amp – sage88

+0

@ sage88 - 這不是我的意見。 – Adam

0

您正在創建一個URL,而不是一些XML內容。你必須考慮什麼系統將會被關注。 XML/HTML解析器永遠不會查看您正在創建的URL。但是,服務器肯定有興趣將URL解釋爲URL。 XML實體語法&amp;與解析URL的內容完全不同。

1

你是不對的:你是而不是應該使用&amp;作爲URL中的參數分隔符。所述第一函數構造的網址:

Bank?firstName=foo&lastName=bar 

第二種:

Bank?firstName=foo&amp;lastName=bar 

的第一URL具有兩個參數:firstNamelastName與值foobar

第二個URL有兩個參數:firstNameamp;lastName,其值爲foobar。 (注意:我相信第二個參數名稱是無效的,我不確定它如何在Java中解析;它可能依賴於庫/服務器)

您的Java代碼在第二種情況下無法打印lastName參數,因爲這種情況下,它沒有設置。

您的困惑似乎源於對URL格式的誤解。 URL格式與XML或HTML無關。它與兩者完全分開。 &amp;是一個XML/HTML實體。如果URL是某種形式的XML,那麼你會是對的。但是,不應該指望它遵循XML的規則和標準。

+0

這是一個很好的答案,但我認爲Adam's幫助我更清楚地理解了爲什麼你會使用&。謝謝,這仍然有幫助! – sage88