2012-03-19 2 views
7

मैं निम्नलिखित jQuery है:jQuery AJAX 200 ठीक स्थिति देता है, लेकिन त्रुटियां। मैं त्रुटि के विवरण कैसे देख सकता हूं?

var fn = { 
    Load: function() { 
     $(".myclass input.Submit").click(function (e) { 
      var _IsValid = fn.IsValid(); 
      if (_IsValid == false) { 
       e.preventDefault(); 
      } 
      //Popup displays message fine if "return false;" is 
      //called here but then obviously never posts back. 
     }); 
    } 
, IsValid: function() { 

    var _IsValid = true; 
$.ajax({ 
     url: "/myURL" 
     , type: 'POST' 
     , contentType: 'application/json; charset=utf-8' 
     , data: JSON.stringify({ Barcode: $barcode.val(), Email: $email.val() }) 
     , dataType: 'json' 
     , success: function (data) { 
      var array = eval(data); 
      if (array[0] == 0) { 
      _IsValid = false; 
      ShowPopup(array[1]); 
      } 
     } 
     , error: function (xhr, status, error) { 

     } 
    }); 
    return _IsValid; 
} 
} 

AJAX प्रतिक्रिया 200 OK है, लेकिन success समारोह भागा नहीं जा रहा है। ऐसा लगता है कि यह error फ़ंक्शन चला रहा है।

स्क्रिप्ट को एएसपी.नेट छवि बटन के लिए एक क्लिक इवेंट श्रोता के रूप में चलाया जा रहा है। यदि _IsValid==false, तो e.preventDefault() को पोस्टबैक को रोकने के लिए बुलाया जाता है।

क्या अजीब बात यह है कि अगर मैं अपने ईवेंट श्रोता समारोह के अंत में झूठी वापसी जोड़ता हूं, तो यह कोड success फ़ंक्शन चलाता है।

मैं यह कैसे पता लगा सकता हूं कि यह त्रुटि के कारण क्या है जिससे मैं इसे हल कर सकूं?

उत्तर

2

मुझे लगता है कि वर्तमान में आपके पास समस्या यह है कि आपका IsValid फ़ंक्शन हमेशा सत्य होगा। ऐसा इसलिए है क्योंकि फ़ंक्शन वापस आने से पहले AJAX पोस्ट में पूरा होने का समय नहीं होगा। यह सब के बाद एक एसिंक्रोनस समारोह है।

जो मैं कह सकता हूं कि आप एक AJAX अनुरोध के साथ एक फॉर्म को मान्य करना चाहते हैं और यदि फॉर्म सबमिट करने के लिए मान्य है, अन्यथा पॉपअप दिखाएं। यदि यह सही है तो आपको कुछ ऐसा करना चाहिए ...

$(".myclass input.Submit").click(function (e) { 
    e.preventDefault(); 
    ProcessForm(); 
}); 

function ProcessForm(){ 
    $.ajax({ 
     url: "/myURL" 
     , type: 'POST' 
     , contentType: 'application/json; charset=utf-8' 
     , data: JSON.stringify({ Barcode: $barcode.val(), Email: $email.val() }) 
     , dataType: 'json' 
     , success: function (data) { 
      var array = eval(data); 
      if (array[0] == 0) { 
      ShowPopup(array[1]); 
      } 
      else//VALID 
      { 
      document.forms[0].submit(); 
      //OR IF YOU HAVE MULTIPLE FORMS SPECIFY AN ID... 
      document.getElementById("FormElement").submit(); 
      } 
     } 
     , error: function (xhr, status, error) { 

     } 
    }); 
} 
2

मैं यह कैसे पता लगा सकता हूं कि यह त्रुटि के कारण क्या है जिससे मैं इसे हल कर सकूं?

आप फ़ायरफ़ॉक्स में फ़ायरबग जैसे जावास्क्रिप्ट डिबगिंग टूल का उपयोग कर सकते हैं जो आपको AJAX अनुरोध और प्रतिक्रिया देखने की अनुमति देगा। आप देखेंगे कि तार और किसी भी संभावित त्रुटियों पर क्या भेजा गया है।

वास्तव में

इस पर देख रहे हैं:

dataType: 'json;' 

आप शायद मतलब:

dataType: 'json' 

आप स्पष्ट रूप से इस तरह प्रतिक्रिया सामग्री प्रकार सेट जब आप सुनिश्चित करें कि सर्वर jQuery के रूप में मान्य JSON भेजता है बनाना चाहिए प्रतिक्रिया का विश्लेषण करने का प्रयास करेगा और यदि यह विफल रहता है तो आपको अपवाद मिलेगा।

इसके अलावा, मैं पूरी तरह से जगह लेंगे:

data: '{"Barcode":"' + $barcode.val() + '", "Email":"' + $email.val() + '"}' 

साथ:

data: JSON.stringify({ Barcode: $barcode.val(), Email: $email.val() }) 

कभी की तरह तुमने किया था के रूप में जब JSON निर्माण स्ट्रिंग concatenations का उपयोग करें।

+0

आपके उत्तर के लिए धन्यवाद। मैंने आपके द्वारा सुझाए गए परिवर्तन किए हैं, और यह अभी भी त्रुटिपूर्ण है। इसके अलावा, मैंने Google क्रोम में जावास्क्रिप्ट को डीबग करने का प्रयास किया है। 'xhr.ResponseText =" "'। आपके पास कोई और सुझाव है? – Curt

+0

मेरा सुझाव नेटवर्क टैब को देखना था जहां आप AJAX अनुरोध और प्रतिक्रियाएं देखते हैं। लेकिन इस मामले में यदि सर्वर ने एक खाली प्रतिक्रिया भेजी और आप स्पष्ट रूप से 'डेटा टाइप:' जेसन 'सेट करते हैं, तो आप जानते हैं,' '' एक अवैध JSON है। तो आप वैध JSON भेजने के लिए अपने सर्वर को ठीक करने का प्रयास कर सकते हैं। –

+0

मैंने अपने प्रश्न को एप्लिकेशन – Curt