2009-10-07 11 views
32

मुझे यहां लोगों को थोड़ी सी समस्या मिली।

  1. एक उपयोगकर्ता को मुखपृष्ठ खुलता है और अन्य उपयोगकर्ताओं की सूची देखता है और क्लिक करता है उसके दोस्त की सूची पर एक जोड़ने के लिए: मैं इस परिदृश्य पर लागू करने के लिए कोशिश कर रहा हूँ।
  2. यदि उपयोगकर्ता लॉग इन है, तो मैं एक सर्वर संसाधन के लिए अजाक्स अनुरोध जारी करता हूं, यदि ऐसा है, तो मैं किसी अन्य सर्वर संसाधन को वास्तव में उपयोगकर्ता की मित्र सूची में जोड़ने के लिए अन्य AJAX अनुरोध जारी करता हूं।

सरल लगता है? यहां मैंने जो किया है: मैंने एक फ़ंक्शन isLoggedIn बनाया है जो यह निर्धारित करने के लिए सर्वर पर पहला अनुरोध जारी करेगा कि उपयोगकर्ता लॉग इन है या नहीं। मैं jQuery.ajax विधि का उपयोग करके यह अनुरोध जारी करता हूं। यहाँ मेरी समारोह लग रहा है जैसे:

function isLoggedIn() { 

    $.ajax({ 
    async: "false", 
     type: "GET", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     url: "/isloggedin", 
     success: function(jsonData) { 
      alert("jsonData =" + jsonData.LoggedIn); 
      return jsonData.LoggedIn; 
     } 
    }); 
} 

लौटे JSON बहुत सरल है, तो वह ऐसा दिखता है:

{ LoggedIn: true } or { LoggedIn : false } 

अब इस विधि, वास्तव में काम करता है और सही ढंग से चेतावनी प्रदर्शित करता है: JsonData = true यदि प्रवेश किया था, । और JsonData = false में लॉग इन नहीं तो इस बिंदु वहाँ कोई समस्या नहीं है तक, समस्या तब होती है जब मैं इस विधि कॉल करने का प्रयास करें:

$(".friend_set .img").click(function() { 
    debugger; 
    if (isLoggedIn()) { 

     alert("alredy logged in"); 
     trackAsync(); 
     popupNum = 6; 
    } 
    else { 
     alert("not logged in"); //always displays this message. 
     popupNum = 1; 
    } 
    //centering with css 

    centerPopup(popupNum); 
    //load popup 
    loadPopup(popupNum); 
    return false; 

}); 
: मैं इसे इतना पसंद किया फोन

कॉलिंग isLoggedIn हमेशा false लौटाता है, और यह false before the ajax request finishes (because the message jsonData = true is displayed after the message "not logged in". I made sure that the request is **NOT** Asynchronous by stating async देता है: false`!

जाहिर है यह एसिंक्रोनस, हालांकि काम कर रहा है। मैं यहाँ लोगों को क्या याद कर रहा हूँ?

+2

यह अगर आपके द्वारा निर्दिष्ट कोई फर्क करता है '{async:" झूठा "} 'बनाम' {async: false} '? –

+0

@Cory लार्सन नहीं, यह कोई फर्क नहीं, बात यह है, विधि रिटर्न झूठी ajax अनुरोध भी पूर्ण होने से पहले करता है। – Galilyou

उत्तर

61

आपको async:false की आवश्यकता है, async:"false" नहीं। (यानी पास बूलियन false, स्ट्रिंग "false" नहीं)।

संपादित करें: भी async अनुरोध के साथ आप,ajax करने के लिए कॉल के बाद एक मूल्य वापस जाने के लिए की जरूरत है नहीं अपनी सफलता हैंडलर के अंदर:

function isLoggedIn() { 
    var isLoggedIn; 
    $.ajax({ 
     async: false, 
     // ... 
     success: function(jsonData) { 
      isLoggedIn = jsonData.LoggedIn 
     } 
    }); 
    return isLoggedIn 
} 
+3

@ 7alwagy: क्षमा करें, मेरा संपादन देखें। –

+0

धन्यवाद bendewey! यह हमेशा किसी ने मेरी पोस्ट (मुझे लगता है कि सुविधा के बारे में भूल जाते हैं), लेकिन धन्यवाद संपादित देखकर कर्कश है। सफलतापूर्वक हैंडलर के बाद –

+4

वापसी मूल्य! –

संबंधित मुद्दे