2013-12-15 7 views
11

मैं निम्नलिखित कोड है:

$("#loginSubmitButton").on("click",function(){ 
    var loginUserDetails = { 
    email: $("#email").val(), 
    password: $("#password").val() 
    }; 

    //Send the AJAX request to authenticate the user 
    $.ajax({ 
    type: "POST", 
    url: "/somewebservice/v1/users/authenticate", 
    data: JSON.stringify(loginUserDetails), 
    contentType: "application/json;charset=UTF-8", 
    dataType: "json", 
    }).done(function() { 
     $("#loginResult").text("Login successful"); 
    }) 
    .fail(function() { 
     $("#loginResult").text("Login failed"); 
    }); 

}); 

प्रति jQuery प्रलेखन जैसा कि मैंने उम्मीद (जब तक मैं गलत तरीके से कुछ समझ रहा हूँ) निष्पादित करने की अगर मैं एक 200 ठीक प्राप्त किया मेरे वेब सर्वर से। हालांकि, क्रोम कंसोल में मैं 200 ओके प्रतिक्रिया देख सकता हूं लेकिन jquery असफल हैंडलर को आग लग रहा है।

क्या किसी को पता है कि मैं यहां क्या गलत कर रहा हूं?

+3

जाँच त्रुटि संदेश प्राप्त करने के लिए शायद –

+3

असफल 'डेटाप्रकार में:" json "' – Musa

+0

आप stringify loginUserDetails की जरूरत नहीं है .. – yoyo

उत्तर

2

डेटाप्रकार से दूर करने के लिए, की आवश्यकता: "json",

dataType: "json" 
+0

अल्पविराम को हटा दिया लेकिन फिर भी एक ही मुद्दा। मैं त्रुटि संदेश को असफल कैसे देखूं? – tsure

0

कुछ चीजें हैं जो आपकी समस्या और सामान्य रूप से एक जोड़े को संकेत स्पष्ट करना चाहिए।

  1. सबमिट बटन पर क्लिक के लिए न सुनें। आपको फॉर्म पर सबमिट ईवेंट की प्रतीक्षा करनी चाहिए।

  2. data$.ajax के लिए विकल्प JSON स्ट्रिंग की अपेक्षा नहीं कर रहा है। यह एक क्रमबद्ध स्ट्रिंग या नाम और मूल्य वस्तुओं के साथ एक सरणी चाहता है। आप इनमें से किसी भी आसानी से .serialize() या .serializeArray() के साथ बना सकते हैं।

यहां मैं आपकी लिपि के लिए क्या सोच रहा था।

$('#form-with-loginSubmitButton').on('submit', function(e){ 


    e.preventDefault(): 

    var $form = $(this), 
     data = $form.serializeArray(); 

    $.ajax({ 
    type: "POST", 
    url: "/somewebservice/v1/users/authenticate", 
    data: data 
    }).done(function(result){ 
    console.log(result); 
    }); 

}); 
+0

किसी भी कारण से मुझे एक क्लिक इवेंट के लिए क्यों नहीं सुनना चाहिए? मेरी वेब सेवा JSON पैरा के साथ एक पोस्ट की अपेक्षा करता है और इसलिए मैंने JSON.Stringify का उपयोग किया। क्या यही समस्या है? – tsure

+0

आप क्लिक किए बिना एक फॉर्म सबमिट कर सकते हैं, या क्लिक किए बिना बटन पर क्लिक करें। ब्राउज़र कुछ मामलों में उन मुद्दों के लिए कवर हो सकता है लेकिन मैं इस पर भरोसा नहीं करता। –

26

आप को दूर करने की जरूरत है: अपने सर्वर एक json प्रतिक्रिया के लिए रिक्त स्ट्रिंग (यहां तक ​​कि एक 200 ठीक से अगर) रिटर्न

dataType: "json"

+4

सुंदर! तुमने मुझे बचाया! –

+0

मुझे इसे पहले देखना चाहिए था, मैंने अपनी वेबसाइट से एक हिस्सा रीमेड किया था, यह बात यह थी कि यदि आप एक जेसन डेटा प्रकार वापस नहीं करते हैं तो jquery इसे असफल के रूप में लेता है। धन्यवाद। –

5

हैं, jQuery के रूप में विफल रहा है व्यवहार करता है। V1.9 के बाद, एक खाली स्ट्रिंग को अवैध जेसन माना जाता है।

$.ajax(..).always(function(data) { 
    console.log(JSON.stringify(data)); 
}); 

इसकी सामग्री आप क्या गलत है की एक समझ दे देंगे:

जो भी कारण है, एक अच्छी जगह को देखने के लिए 'डेटा' पैरामीटर कॉलबैक करने के लिए पारित कर दिया है।

15

सुझाव के बहुत सारे

dataType: "json" 

दूर करने के लिए मैं अनुदान हालांकि यह काम करता है कि यह शायद अंतर्निहित मुद्दे की अनदेखी कर रहा है कर रहे हैं। यह एक पार्सर त्रुटि (जेसन प्रतिक्रिया को पारदर्शी करने वाला ब्राउज़र) के कारण होने की संभावना है। सबसे पहले .always() या .fail() में XHR पैरामीटर की जांच करें।

मान लीजिए कि यह एक पार्सर असफल है तो क्यों? शायद वापसी स्ट्रिंग JSON नहीं है। या प्रतिक्रिया की शुरुआत में यह गंदे सफेद जगह हो सकता है। फिडलर में इसे देखने पर विचार करें। मेरा इस तरह देखा:

Connection: Keep-Alive 
Content-Type: application/json; charset=utf-8 

{"type":"scan","data":{"image":".\/output\/ou... 

मेरे मामले में यह पीएचपी अवांछित पात्रों उगल (इस मामले UTF फ़ाइल BOMs में) के साथ एक समस्या थी। एक बार जब मैं इन हटाया यह करते हुए भी

dataType: json 
+2

बहुत बढ़िया! 'डेटा टाइप' को हटाकर सिर्फ एक कामकाज है। डेटा स्रोत को ठीक करना वास्तविक फिक्स है। –

+0

अच्छा। मुझे लगता है कि मेरा मुद्दा यह था कि सर्वर जेएसओएन प्रतिक्रिया के बजाय 'टेक्स्ट/एचटीएमएल' वापस कर रहा था। – Harvey

0

ajax URL रख एक ही डोमेन में होना चाहिए समस्या तय। आप क्रॉस-डोमेन स्क्रिप्ट तक पहुंचने के लिए AJAX का उपयोग नहीं कर सकते हैं।यह वही मूल नीति के कारण है।
ऐड "डेटाप्रकार: JSONP" क्रॉस-डोमेन संचार कोड नीचे

उपयोग

$.ajax({ 
     URL: cross domain 

     dataType: 'jsonp' 
      // must use dataType:JSONP to achieve cross domain communication, otherwise done function would not called. 
      // jquery ajax will return "statustext error" at }).always(function(data){} 


}).always(function(data){ 
     alert(JSON.stringify(data)); 
    } 
संबंधित मुद्दे