2008-12-10 15 views
29

मैं JQuery का उपयोग कर एक AJAX कॉल करने के लिए डेटास्ट्रिंग पास करने का प्रयास कर रहा हूं। कॉल में, मैं प्राप्त पैरामीटर का निर्माण करता हूं और फिर प्राप्त करने वाले अंत में उन्हें php पेज पर भेजता हूं। समस्या यह है कि डेटा स्ट्रिंग में उनमें एम्पर्सेंड हैं और HTML सख्त सत्यापनकर्ता इस पर चौंकाने वाला है। सामान्य इकाई "password" के लिए प्रणाली पहचानकर्ता उत्पन्न नहीं कर सकते:मैं जावास्क्रिप्ट स्ट्रिंग में एम्पर्सेंड से कैसे बचूं ताकि पृष्ठ सख्त मान्य हो सके?

यहाँ कोड है:

$(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; 
    }); 
}); 

और यहाँ सत्यापनकर्ता संदेश का एक उदाहरण है।

var dataString = "email="+username+"&password="+password+"&remember="+rememb… 

(सत्यापनकर्ता में पहले एम्पर्सेंड के बाद "पी" विफलता के बिंदु को इंगित करने के लिए लाल चिह्नित किया गया है)।

उत्तर

34

इस तरह एक CDATA ब्लॉक के अंदर अपना जावास्क्रिप्ट डालने का प्रयास करें:

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

जो यह प्रमाणीकरण में सफल बनाना चाहिए। अतिरिक्त सुरक्षित रहने के लिए आप उन्हें पुराने ब्राउज़र जो CDATA टैग समझ में नहीं आता से छिपाने के लिए CDATA टैग आसपास जावास्क्रिप्ट टिप्पणी जोड़ सकते हैं:

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

वह। या शायद \ u0026 (मुझे लगता है कि यह कोड है) – Strelok

+1

यह सही था। पहला जवाब काम नहीं किया लेकिन दूसरे ने किया। सहायता के लिए धन्यवाद! –

0

मैं कोशिश करेंगे:

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

हाँ, मैंने कोशिश की है कि पहले से ही नहीं। सहायता के लिए धन्यवाद। –

+0

यह एक्सएचटीएमएल में काम करता है, लेकिन एचटीएमएल-संगत एक्सएचटीएमएल नहीं। – Quentin

6

नोट: एक से पहले सीडीएटीए ब्लॉक में अंधेरे से लपेटने वाले पाठ को चला जाता है, इस बात से अवगत रहें कि अमान्य वर्ण वैध बनाने के लिए सीडीएटीए का उद्देश्य नहीं है।

देखें: http://www.flightlab.com/~joe/sgml/cdata.html

20

"\ u0026" काम करता है!

0

कभी कभी \u0026, &#38, %26, &amp, या एक्सएचटीएमएल में स्क्रिप्ट ब्लॉक में ऐम्परसेंड के लिए <![CDATA[ ... ]]> काम करते हैं।
मैं पूछना चाहूंगा कि हमें इस तरह के प्रतिबंध क्यों चाहिए (एसजीएमएल के डिजाइन में त्रुटियों के प्रति निष्ठा को झुकाएं) जो &nbsp, mathml, target, और nested xml को काम करने से रोकता है।
हम क्यों नहीं कह सकते कि एक स्क्रिप्ट ब्लॉक में कोई टैग या अन्य एसजीएमएल सामान पहचाना नहीं जाता है? एक्सएचटीएमएल लक्ष्य को काम क्यों नहीं कर सकता?
मुझे एसजीएमएल का लाभ नहीं दिखता है जो नुकसान से अधिक है। अभी, हालांकि एचटीएमएल 5 कुछ हद तक उपलब्ध है, एक्सएचटीएमएल वैधकर्ता है जो सबसे डेवलपर त्रुटियों को पकड़ता है। चलिए अपने मूल के ऐतिहासिक संबंध के बिना xml को ठीक करते हैं।