2016-10-21 199 views
0

我在一個mvc程序上工作,點擊一個按鈕後,我將TextArea內的數據發送到控制器。通常,我的代碼按預期工作,但當TextArea中的數據由基於html的數據組成時,情況並非如此。當發送數據爲html數據時發送ajax請求

HTML代碼:

<textarea id="bodyInfo"> </textarea> 
<button onclick="Submit()" id="submitInfo">Create Notification</button> 

ajax: 
    function Submit() { 
     $.ajax({ 
      url: '@Url.Action("GetResults", "notification")', 
      type: 'GET', 
      data: { body: $('#bodyInfo').val()), 
      cache: 'false', 
      dataType: 'html', 
      success: function (result) { 
       $('#resultsTblInfo').html(result); 
      } 
     }); 
     return false; 
    } 

文本區域數據的樣本實施例:

<table style="width:100%"> 
<tbody> 
<tr> 
<td class="ellipses-title" style="color:#22557f;font-size:15px;font-weight:bold;margin-bottom:10px;margin-top:7px;border-right:1px solid #BFF1FD;text-align:right;padding-right:15px;"> The New Admin is Coming</td> 
<td class="ellipses-text" style="padding-left:15px;" valign="center">Hello<br> Hello2</a>. 
</td> 
</tr> 
</tbody> 
</table> 

什麼上面看時的TextArea不是HTML數據,但原始文本的工作,但如果它是HTML數據會失敗。

我能夠通過使用

「encodeURIComponent方法($( '#bodyInfo')。VAL())」 的

,而不是使這項工作 「$( '#bodyInfo')。VAL()」

在控制器端,做

「body = HttpUtility.UrlDecode(body)」;

是否有更好的選擇來實現相同的目標?我是否使用encodeURIComponent反對其預期的本質?爲什麼$('#bodyInfo')。val()在通過ajax傳遞html值時不起作用?如果這個問題是重複的,我將不勝感激,如果有人可以提供給我一個鏈接(我試圖通過谷歌搜索,但沒有找到滿意的答案)

回答

1

這正是你使用encodeURIComponent爲。這個想法是在發送它時編碼(可能有問題的)值,然後在服務器端對它進行解碼以便使用它,但是它是需要的。

事實上,有這種MDNencodeURIComponent文檔頁面上的例子:

爲了避免意外的請求到服務器,你應該叫encodeURIComponent方法上,將作爲一部分被傳遞任何用戶輸入的參數的URI。例如,用戶可以鍵入「Thyme & time = again」作爲變量註釋。不在這個變量上使用encodeURIComponent會給出comment = Thyme%20 =再次。請注意,與符號和等號標記了一個新的鍵和值對。

1

我認爲在您的textarea html數據中,有一個「&」字符。 是這樣的,問題是無法將字符&發送到服務器。這是因爲發送數據時,瀏覽器收集數據,分開&字符http://example.php?a=something&b=other。因此,如果數據中有&字符,瀏覽器將無法區分它是數據還是URI組件。

通常的解決方案是在數據發送之前將數據轉換爲base64文本。通過這種方式,您可以使用base64_decode功能(case of php)將其解碼。你可以在javascript中使用window.btoa函數base64編碼你的數據。另一個解決方案是你使用的。

第三種解決方案是用你知道它永遠不會存在於你的textarea中的[@#alpha]代替&個字符。 希望它有幫助