में xmlhttprequest ऑब्जेक्ट्स कैसे बनाए जाते हैं, मर्ज किए जाते हैं और नष्ट होते हैं मेरी पृष्ठभूमि पारंपरिक संकलित ऑब्जेक्ट-उन्मुख भाषाओं जैसे सी ++ और .NET प्रोग्रामिंग में है, और अब मैं एक नई परियोजना के लिए जावास्क्रिप्ट के कुछ हद तक डब कर रहा हूं। मैं AJAX के साथ डब रहा था और ब्राउजर द्वारा ऑब्जेक्ट्स को प्रबंधित करने के तरीके के बारे में एक भ्रमित पहलू पर आया था।जावास्क्रिप्ट
- बटन पाठ के साथ 1 अद्यतन TextArea1: -
[# संपादित 2] सक्रिय सामग्री स्क्रिप्ट में बदलें
मैं तीन बटन जो प्रत्येक अद्यतन एक
<textarea>
XMLHttpRequest
वस्तुओं का उपयोग कर के साथ एक अभ्यास पृष्ठ है की सामग्री slowtime.php - बटन 2 slowtime.php से टेक्स्ट सामग्री के साथ TextArea2 अपडेट करता है
- बटन 3 अपडेट fasttime.php
से पाठ सामग्री के साथ TextArea3 कहाँ slowtime.php और fasttime.php सरल स्क्रिप्ट जो दो timestamps के साथ एक पाठ/HTML पृष्ठ वापसी कर रहे हैं: एक जब पृष्ठ लोड होता है, कुछ समय बीत जाने के बाद।
प्रत्येक बटन एक समय में एक क्लिक करते समय सही ढंग से काम करता है। यदि मैं पहले अनुरोध पूरा होने से पहले बटन 2 पर क्लिक करता हूं और फिर बटन 3 पर क्लिक करता हूं, तो अपडेट अभी भी अपेक्षित काम करते हैं।
यदि मैं पहला अनुरोध पूरा करने से पहले बटन 1 पर क्लिक करता हूं और फिर बटन 2 पर क्लिक करता हूं, तो टेक्स्टएरिया 1 और टेक्स्ट एरिया 2 सही मान प्राप्त करता है; हालांकि, onreadystatechange
इवेंट कॉल एक ही समय में होते हैं, यानी, पहली बार देर से प्रतिक्रिया होती है और दूसरी बार आने पर संसाधित होती है।
नमूना कोड
वेबसाइट
<!DOCTYPE html>
<html>
<head>
<script>
function loadXMLDoc(url,target)
{
var xmlhttp;
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById(target).value=xmlhttp.responseText;
}
}
xmlhttp.open("POST",url,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
<input type="button" value="Button 1" onClick="loadXMLDoc('slowtime.php','TextArea1')"/>
<input type="button" value="Button 2" onClick="loadXMLDoc('slowtime.php','TextArea2')"/>
<input type="button" value="Button 3" onClick="loadXMLDoc('fasttime.php','TextArea3')"/>
<div><textarea id="TextArea1"></textarea></div>
<div><textarea id="TextArea2"></textarea></div>
<div><textarea id="TextArea3"></textarea></div>
</form>
</body>
</html>
पीएचपी संहिता (slowtime.php)
<?php
echo date('h:i:s') . "\n";
sleep(5);
echo date('h:i:s') . "\n";
?>
प्रश्न [संशोधित]
ब्राउज़र XMLHttpRequest
ऑब्जेक्ट्स का प्रबंधन कैसे करता है? बटन 2 और 3 दबाकर इंगित करता है कि प्रत्येक प्रेस एक नई वस्तु को तुरंत चालू करती है, और इनमें से प्रत्येक में स्वतंत्र ईवेंट हैंडलर होते हैं। यदि ऑब्जेक्ट प्रारंभिक फ़ंक्शन कॉल से पहले रहते हैं (क्योंकि उनके ईवेंट हैंडलर जीवित रहते हैं) जब वे स्मृति/विनाश से साफ़ हो जाते हैं?
यदि XMLHttpRequests
अलग-अलग ऑब्जेक्ट्स हैं, तो उसी URL पर दूसरा अनुरोध भेजने से पहले के प्रतिक्रिया समय को प्रभावित किया जाता है? क्या यह एक सर्वर-साइड मुद्दा हो सकता है?
अपने 'xmlhttp.onreadystatechange' फ़ंक्शन में, क्या आप शायद' xmlhttp.responseText' के बजाय 'this.responseText' का उपयोग कर सकते हैं? –
@ JoshuaD.Boyd यह कुछ और नहीं करना चाहिए क्योंकि 'xmlhttp' चर' loadXMLDoc' के अंदर एक स्थानीय दायरे में है। – Tyilo
'onmlstpchange' फ़ंक्शन में 'xmlhttp'' के सभी संदर्भों को बदलकर भी काम करता है, और यह भी व्यवहार करता है – nicholas