2016-10-21 4 views
0

Ich arbeitete an einem MVC-Programm, wo auf einen Klick auf eine Schaltfläche senden ich Daten in einem TextArea an den Controller. Normalerweise funktionierte mein Code wie erwartet, aber das war nicht der Fall, wenn die Daten in der TextArea aus HTML-basierten Daten bestanden.Senden einer AJAX-Anfrage, wenn Daten gesendet HTML-Daten

Html-Code:

<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; 
    } 

Musterbeispiel TextArea- Daten:

<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> 

Was wurde oben funktionieren würde, zu sehen, wenn TextArea- nicht HTML-Daten war aber Rohtext aber würde scheitern, wenn es HTML-Daten sind .

konnte ich diese Arbeit machen, indem

"encodeURIComponent ($ ('# bodyInfo'). Val())" anstelle von "$ ('# bodyInfo'). Val()"

In der Controller-Seite, tun

"body = HttpUtility.UrlDecode (Körper)";

Gibt es bessere Alternativen, um dasselbe zu erreichen? Verwende ich encodeURIComponent gegen seine beabsichtigte Natur? Warum funktioniert $ ('# bodyInfo') .val() nicht, wenn HTML-Werte über Ajax übergeben werden? Wenn diese Frage ein Duplikat ist, würde ich mich freuen, wenn mir jemand einen Link zur Verfügung stellen könnte (ich habe versucht, durch google zu suchen, aber keine befriedigende Antwort gefunden)

Antwort

1

Das ist genau das, was Sie verwenden würden encodeURIComponent für. Die Idee ist, den (potentiell problematischen) Wert beim Senden zu verschlüsseln und dann serverseitig zu dekodieren, um es zu verwenden, wie es auch nötig ist.

In der Tat ist es ein Beispiel dafür auf MDN ‚s encodeURIComponent Dokumentationsseite:

Um unerwartete Anfragen an den Server zu vermeiden, sollten Sie encodeURIComponent auf alle vom Benutzer eingegebenen Parameter aufrufen, die als Teil weitergegeben wird eines URIs. Zum Beispiel könnte ein Benutzer "Thyme & time = again" für einen Variablenkommentar eingeben. Wird encodeURIComponent für diese Variable nicht verwendet, wird comment = Thyme% 20 & time = again zurückgegeben. Beachten Sie, dass das Und-Zeichen und das Gleichheitszeichen ein neues Schlüssel-Wert-Paar markieren.

1

Ich denke, dass in Ihrem Textarea HTML-Daten gab es ein "&" Zeichen. ist so, das Problem ist, dass das Zeichen & nicht an einen Server gesendet werden kann. Dies liegt daran, dass beim Senden von Daten der Browser Daten sammelt, die durch & Zeichen http://example.php?a=something&b=other getrennt sind. Wenn also in Ihren Daten das Zeichen & steht, kann der Browser nicht unterscheiden, ob es sich um eine Daten- oder URI-Komponente handelt.

Die übliche Lösung besteht darin, Ihre Daten vor dem Senden in base64-Text umzuwandeln. Auf diese Weise können Sie es in Ihrem Server mit base64_decode fonction (case of php) decodieren. Sie können Base64 Ihre Daten mit window.btoa Funktion in Javascript codieren. eine andere Lösung ist, was du benutzt hast.

Eine dritte Lösung ist, & Zeichen durch etwas zu ersetzen, von dem Sie wissen, dass es nie in Ihnen Textarea wie [@ # Alpha] existieren wird. hoffe es hilft

Verwandte Themen