iT邦幫忙

0

我有一段AJAX的語法,我該如何修改,讓多段的資料同時進行更新

我有一段AJAX的語法

var http_request = false;
function send_request(obj,url)
{
http_request = false;
if(window.XMLHttpRequest)
{
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType)
{
http_request.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject)
{
try
{
http_request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
}
}
}
if (!http_request)
{

obj.innerHTML="不能創建XMLHttpRequest.";
return false;
}

http_request.onreadystatechange = function(){processRequest1(obj)};

http_request.open("GET",url, true);
http_request.send(null);
}

function processRequest1(obj)
{
if (http_request.readyState == 4)
{
if (http_request.status == 200)
{
obj.innerHTML=unescape(http_request.responseText);
}
else
{
obj.innerHTML="錯誤";
}
}
else
{
obj.innerHTML="<IMG SRC=../IMAGES/LOADER6.GIF>";
}
}

在同一個網頁裡,有設定TIMER,讓多個DIV的資料可以透過這個JAVASCRIPT更新資料,但是發現,只要同時運作,就跑不出來,間隔時間運作就可以,我該怎樣修改,讓資料可以同時進行更新

謝謝大家

fillano iT邦超人 1 級 ‧ 2010-04-25 07:05:29 檢舉
網站喔...我是建議買書來看,這樣學比較有系統。我自己買過的書有O'reily的犀牛書跟優良部份,還有PPK on Javascript。

另一種精進的方式是直接看ECMA-262 Edition3規格,不過這個很難看懂...ECMA-262 Edition5已經出來了,但是目前還沒有Javascript引擎完整支援的。(strict mode目前沒人支援)

Johen Resig的部落格、Douglas Crockford的個人網站,PPK的網站上有許多好東西。

我的部落格上也有一些文章啦:
http://fillano.blog.ithome.com.tw/
,部過許久未更新...
wordsmith iT邦高手 1 級 ‧ 2010-04-27 18:12:47 檢舉
給個「讚」。
wordsmith iT邦高手 1 級 ‧ 2010-04-27 18:15:25 檢舉
其實犀牛書好好啃的話,JavaScript功力一定會大增的。這本也是Douglas Crockford少數推薦的JS書,他說其他JS書誤導的成分比教導的成份高(大概的意思啦)。當然優良部份也是值得一讀的書。

上述兩本書對JS完全初學者而言,讀起來會有點壓力,不過只要有一點基礎,幫助就很大了。

1 個回答

10
fillano
iT邦超人 1 級 ‧ 2010-04-23 17:33:59
最佳解答

有一個觀念需要澄清,網頁中的javascript並不是執行緒,所以不太可能「同時」進行更新。

另外,你的程式共用一個http_request整體變數,所以你不能讓他同時處理多個request。最快的改法是像這樣:

&lt;pre class="c" name="code">
function send_request(obj,url)
{
	var http_request = false;
	if(window.XMLHttpRequest)
	{
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType)
		{
			http_request.overrideMimeType('text/xml');
		}
	}
	else if (window.ActiveXObject)
	{
		try
		{
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
			}
		}
	}
	if (!http_request)
	{

		obj.innerHTML="不能創建XMLHttpRequest.";
		return false;
	}
	function processRequest1(obj)
	{
		if (http_request.readyState == 4)
		{
			if (http_request.status == 200)
			{
				obj.innerHTML=unescape(http_request.responseText);
			}
			else
			{
				obj.innerHTML="錯誤";
			}
		}
		else
		{
			obj.innerHTML="&lt;IMG SRC=../IMAGES/LOADER6.GIF>";
		}
	}

	http_request.onreadystatechange = function(){processRequest1(obj)};

	http_request.open("GET",url, true);
	http_request.send(null);
}
lungzen iT邦新手 4 級 ‧ 2010-04-24 23:58:17 檢舉

非常感謝,看來我JAVASCRIPT的基本功非常不足,是否請前輩推薦一些教學網站或資料可供進修的

我要發表回答

立即登入回答