2011-01-07 17 views
10

मेरे पास एक बटन है जहां मैंने उपयोगकर्ताओं के स्थान को पुनर्प्राप्त करने के लिए कॉल पर क्लिक किया है और फिर आस-पास के स्थानों की सूची पुनर्प्राप्त करने के लिए एक और कॉल करने के लिए स्थान का उपयोग किया है। कुछ कारणों से भौगोलिक स्थान सफलता विधि को बटन के दूसरे क्लिक पर दो बार बुलाया जा रहा है।यह जावास्क्रिप्ट दो बार क्यों बुलाया जा रहा है?

इसलिए मैं पृष्ठ लोड करता हूं, बटन क्लिक करता हूं, मेरे स्थान का उपयोग करने की अनुमति देता हूं, और यह आस-पास के स्थानों को प्राप्त करने के लिए एक AJAX अनुरोध करेगा। यह ठीक काम करता है।

मैं बटन को फिर से क्लिक करता हूं, मेरे स्थान (दोबारा) का उपयोग करने की अनुमति देता है, यह स्थानों को प्राप्त करने के लिए एक AJAX अनुरोध करेगा, ~ 2 सेकंड प्रतीक्षा करें, और फिर अनुमति के बिना एक ही निर्देशांक का उपयोग करके एक और अनुरोध करें। तो सफलता विधि को दो बार बुलाया जाना है, लेकिन मुझे यकीन नहीं है कि क्यों।

$("#FindLocation").click(function() { 
    myScript.findNearbyLocations(displayData, displayError); 
}); 

इस क्लिक फ़ंक्शन को दो बार नहीं कहा जा रहा है और मैंने प्रदर्शन डेटा और डिस्प्ले एरर में सभी कोडों पर टिप्पणी की है।

findNearbyLocations: function (onSuccess, onFailure) { 
    if (navigator.geolocation) { 
    browserSupportFlag = true; 
    navigator.geolocation.getCurrentPosition(function (position) { 
     alert('This is getting called twice except on the initial call.'); 
     myScript.findStores(position.coords.latitude, position.coords.longitude, onSuccess, onFailure); 
    }, function() { 
     onFailure(true); 
    }); 
    } 
} 

कोई भी देखता है कि मैं गलत कहां गया हूं?

संपादित करें: मुझे नहीं लगता कि मार्कअप समस्या है। मैं केवल परीक्षण के लिए बुनियादी वेबपृष्ठों का उपयोग कर रहा हूँ। इस समय कोई स्टाइल या अन्य तत्व नहीं है।

<form id="form1" runat="server"> 
    <div>  
    <MyControls:Search ID="Search" runat="server" /> 
    </div> 
</form> 

और उपयोगकर्ता नियंत्रण (सभी आवश्यक जावास्क्रिप्ट के साथ शामिल है)

<script type="text/javascript"> 
    $(document).ready(function() { 
    $("#FindLocation").click(function() { 
     myScript.findNearbyLocations(displayData, displayError); 
    }); 
    }); 
</script> 

<input type="button" id="FindLocation" value="Find Location" /> 
<div id="results"> 
</div> 
+0

चालू नहीं होना चाहिए आपकी अंतिम पंक्ति पर विफल होना चाहिए? – DOK

+0

@ डीओके, जो इस पर निर्भर करेगा कि उसकी 'विफलता' विधि उस पैरामीटर के साथ क्या करती है। – CaffGeek

+0

@ डीओके, नहीं, यह फ़ंक्शन बस लेता है कि ब्राउजर नेविगेटर.जोलोकेशन फ़ंक्शनेशनलिटी का समर्थन करता है या नहीं। चूंकि हमने इसे कथन में बनाया है, मुझे पता है कि यह समर्थित है, लेकिन उपयोगकर्ता ने अपने स्थान का उपयोग करने से इनकार कर दिया होगा। – Brandon

उत्तर

4

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

2

जब भी मैं हो रहा पाया है, क्योंकि मैं गलती से दो बार नियंत्रण करने के लिए घटना के लिए बाध्य है।

कोड

$("#FindLocation").click(function() { 
    myScript.findNearbyLocations(displayData, displayError); 
}); 

होता है दो बार चलाने के लिए हैं, तो आप दो समान क्लिक ईवेंट बाध्य होगा, और कार्रवाई दो बार नहीं होगा।

+0

मेरे पास उस कोड में document.ready फ़ंक्शन है। मुझे विश्वास नहीं है कि यह दो बार बंधे जा रहा है। मैंने FindNearbyLocations कॉल से पहले एक चेतावनी दी और इसे केवल पहले और बाद के क्लिक के लिए प्रत्येक बार कॉल किया जाता है। – Brandon

2

मुझे एक ही समस्या का सामना करना पड़ा, ऐसा लगता है कि यह एक ब्राउज़र बग (फ़ायरफ़ॉक्स और सफारी में परीक्षण किया गया) लगता है। मैं बस सत्यापित करें कि क्या मैं पहले से ही हाल ही में एक समय सीमा के भीतर ही डेटा, के लिए इसी तरह लिया गया था कि यहाँ क्या जवाब है: navigator.geolocation.getCurrentPosition sometimes works sometimes doesn't

अधिक Google में सवाल है, लेकिन कोई निश्चित जवाब: http://www.google.nl/search?q=geolocation.getCurrentPosition+called+twice&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a

+1

+1 यह पुष्टि करने के लिए एक बग है। मान लीजिए मैं विषाणु के जवाब के साथ जाऊंगा और बस ध्वज में गुजर जाऊंगा। धन्यवाद। – Brandon

0

यह हो रहा है, और यह क्या हो रहा है अनुमानित आवृत्ति के साथ; जो ऐप में मैंने पाया है, वह अभी है कि जब कोई त्रुटि उठाई जाती है और पकड़ी नहीं जाती है, तो कहीं भी अज्ञात फ़ंक्शन में वर्तमान जावास्क्रिप्ट सत्र को समाप्त करने के लिए दिखाई देता है, जब ऐसा होता है। यह निराशाजनक और कष्टप्रद है; मुझे पता है क्यों यह हो रहा है, लेकिन मुझे नहीं पता है, जहां यह हो रहा है ... अभी तक।

लेकिन यह है, इसलिए बस एक त्वरित टिप्पणी है कि सभी "जो नहीं हो सकते" उत्तर बहुत सटीक या सहायक नहीं हैं।

वैसे भी, यह मेरा जवाब है; आपके पास कुछ आंतरिक फ़ंक्शन हो सकता है जो एक त्रुटि को फेंक रहा है जो JQuery चुपचाप खा रहा है या कुछ।

$ .02

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