2008-12-10 18 views
29

Próbuję przekazać DataString do wywołania ajax przy użyciu JQuery. W wywołaniu konstruuję parametry get, a następnie wysyłam je na stronę php po stronie odbiorczej. Kłopot polega na tym, że ciąg danych zawiera w sobie znaki ampersands i ukrywa się na nim ścisły weryfikator HTML.Jak mogę uniknąć znaku ampersand w ciągu javascript, aby strona została zatwierdzona jako ścisła?

Oto kod:

$(document).ready(function(){ 
    $("input#email").focus(); 
    $('#login_submit').submit(function(){ 
     var username = $('input#email').val(); 
     var password = $('input#password').val(); 
     var remember = $('input#remember').attr("checked"); 
     var dataString = "email="+username+"&password="+password+"&remember="+remember; 
     $.post('login.php', dataString, function(data) { 
      if (data == 'Login Succeeded.') { 
       location.reload(true); 
      } else { 
       $("input#email").focus(); 
       $("#login_msg").html(data).effect("pulsate", {times: 2}, 1000); 
      } 
     });   
     return false; 
    }); 
}); 

i tutaj jest przykładem wiadomości walidatora: nie można wygenerować identyfikator systemu dla ogółu podmiotów „hasło”.

(w walidatorze "p" po pierwszym znaku ampersand jest oznaczony na czerwono, wskazując punkt awarii).

Odpowiedz

34

Spróbuj oddanie javascript wewnątrz bloku CDATA tak:

<script type="text/javascript"> 
<![CDATA[ 
// content of your Javascript goes here 
]]> 
</script> 

która powinna uczynić to przechodzi walidacji. Być bardzo bezpieczny można dodać Javascript komentarzy wokół tagów CDATA, aby ukryć je przed starszymi przeglądarkami, którzy nie rozumieją tagu CDATA:

<script type="text/javascript"> 
/* <![CDATA[ */ 
// content of your Javascript goes here 
/* ]]> */ 
</script> 
+6

To. A może użyć \ u0026 (myślę, że to kod dla &) – Strelok

+1

To było idealne. Pierwsza odpowiedź nie zadziałała, ale druga tak. Dzięki za pomoc! –

0

chciałbym spróbować:

var dataString = "email="+username+"&amp;password="+password+"&amp;remember="+remember; 
+0

tak, próbowałem już i nie ma. Dzięki za pomoc. –

+0

Działa to w XHTML, ale nie w XHTML zgodnym z HTML. – Quentin

20

"\ u0026" działa!

0

Czasami \u0026, &#38, %26, &amp lub <![CDATA[ ... ]]> praca dla ampersandów w blokach skryptu w xhtml.
Chciałbym zapytać, dlaczego powinniśmy chcieć tego rodzaju ograniczenia (lojalność wobec błędów w projektowaniu SGML), który również uniemożliwia działanie &nbsp, mathml, target i nested xml.
Dlaczego nie możemy po prostu powiedzieć, że w bloku skryptu nie rozpoznano tagów ani innych rzeczy SGML? Dlaczego xhtml nie pozwala na działanie celów?
Nie widzę korzyści dla SGML, które przewyższają wady. W tej chwili, mimo że html5 jest w pewnym stopniu dostępny, xhtml jest walidatorem, który łapie najwięcej błędów programistów. Naprawmy xml bez historycznego uwzględnienia jego pochodzenia.

Powiązane problemy