亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用 XMLHTTPRequest 編程原文章和注意事項

2019-11-18 14:25:19
字體:
來源:轉載
供稿:網友

  用 xmlHTTPRequest 編程原文章和注重事項
Client Side Validation Using the xmlhttpRequest Object
By Jonathan Zufi Rating: 4.3 out of 5
Rate this article


print this article

email this article to a colleague

suggest an article
IntrodUCtion

As an avid reader of 15 seconds, I´ve been eXPosed to many articles on form validation. Form validation should not only address checking fields for content and structure, it should also handle real-time lookups on data. This article shows how Microsoft´s XMLHTTPRequest component can give your users a cleaner and more efficient Web experience by improving form validation.


Programming for HTTP


There have always been several ways of making HTTP calls on the Win32 platform. Visual Basic and C++ developers could leverage the WinInet library, and Visual Basic programmers could utilize the Internet Controls that shipped with Visual Basic 6.0. However, asp developers have had a bit more work getting access to this functionality, since they would need to wrap it in a custom component for elegant interaction with ASP code. ´Raw´ scripting makes the task difficult.

Most people assume HTTP is a protocol reserved for browsers to communicate with Web servers. Remember, HTTP is just a protocol, and a powerful one at that. HTTP can be used by any application to talk to another application or component; it doesn´t have to be a browser or a Web server. As Web developers, we are all familiar with the benefits of using the HTTP protocol. It works well across firewalls, is based on Internet standards, etc.

Microsoft included the XMLHTTPRequest component in its XML toolkit so XML documents could be passed around over the Internet using the standard HTTP protocol. While all the documentation speaks of XML interchange over HTTP, the nice thing about this component is that you don´t have to deal with XML at all to leverage its power. Only a few lines of code are necessary to make a HTTP call and capture the results. This makes the XMLHTTPRequest component an extremely powerful tool in every Web developer´s arsenal, especially ASP developers.


XMLHTTPRequest and XMLHTTP


The XMLHTTPRequest component is part of MSXML, which ships with Internet Explorer 5.0 and higher. This makes it an even more attractive tool. The core object inside XMLHTTPRequest is the XMLHTTP object. There are different versions of the XMLHTTP object, since it´s been included in every version of the Microsoft MSXML package. For a good overview of the latest versions and installation issues, see the Microsoft knowledge base article Q278969.

The XMLHTTP object provides all of your Web browser´s communication functionality with just a handful of methods and properties. To use this object, create the XMLHTTP object, call the open method with the URL you want to talk to, the type of call to make (GET, POST), and then invoke the send method. The object will basically act like a browser and retrieve the data from the URL, making it available in the responseText property. You can also make synchronous or asynchronous calls. There is also a callback facility available for asynchronous calls. Very neat and very simple.


Using XMLHTTP to perform real time data validation


Say that you are capturing user registration details for your Web site, and one of the fields is ´User ID´. This User ID obviously needs to be unique across your site, so you´ll have a requirement to ensure that the User ID supplied at registration time does not already exist. If it does, you´ll need to warn the user and ask them to re-enter it.

The common way of dealing with this type of requirement is to apply the lookup logic when the form is posted. However, this can sometimes lead to what is not the best user experience. We all know how frustrating it is to continually submit forms only to find that we have forgotten a value here or there. The other downside of posting the page is that if it needs to be re-rendered with the appropriate ´please correct this problem´ messages, that´s another trip to the server, images, script and all.

The ideal way to handle this is to alert users as soon as they have entered their username as to whether or not it is unique. On a desktop app, this would be simple - put some code in the ´lost focus´ event of the text box. javascript and the XMLHTTP object can provide the same level of interaction.

Let´s walk through an example, registering with a fictitious company.



The Html for the User ID field looks like this:


<input type="text" name="UserID" onblur="validateuserid(this.value);">


The ´onblur´ event will fire our validation routine when the user tabs out of the User ID textbox. (Note: if you´re not a fan of focus driven validation, you could move this to the onclick event of the Register button).
Examine the Javascript that performs the validation:


<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
function validateuserid(suserid) {

document.body.style.cursor=´wait´;

// Create an instance of the XML HTTP Request object
var oXMLHTTP = new ActiveXObject( "Microsoft.XMLHTTP" );

// Prepare the XMLHTTP object for a HTTP POST to our validation ASP page
var sURL = "http://mysite/mypath/validateuser.asp?username=" + suserid
oXMLHTTP.open( "POST", sURL, false );

// Execute the request
oXMLHTTP.send();

if (oXMLHTTP.responseText == "exists")
alert("Sorry - the User ID " + suserid + " already exists.");

document.body.style.cursor=´auto´;
}
</SCRIPT>


Let´s go through the script block in detail to see what its doing:

document.body.style.cursor=´wait´;


The script is going to make a HTTP call, which might take a second or two, so this line changes the mouse to an hourglass to give the user some feedback. From the user experience point of view, there are prettier things you can do with the UI other than changing the mouse pointer. Javascript and DHTML give you everything you need. In fact, there is a much more elegant way to handle this, which we´ll examine later on.

// Create an instance of the XML HTTP Request object
var oXMLHTTP = new ActiveXObject( "Microsoft.XMLHTTP" );


This creates an instance of the XMLHTTP object.

// Prepare the XMLHTTP object for a HTTP POST to our validation ASP page
var sURL = "http://mysite/mypath/validateuser.asp?userid=" + suserid
oXMLHTTP.open( "GET", sURL, false );


The ´open´ method prepares the request that we are about to make. The first parameter defines the connection to use. In this case, we´ll use the GET method. ´open´ supports other methods such as PUT and POST. (POST is VERY powerful, because as implied, you can programmatically post forms as well). The next parameter specifies the URL that we are connecting to. Since we are running this script on the client, this should be an absolute URL. Here we construct a call to a custom ASP page which will tell us whether or not the User ID exists (more on this in a moment).
The third parameter is used to tell the object whether or not to make the call asynchronously. I´ve set this to False, indicating that we want to wait until the call returns before continuing.

There are two other optional parameters, username and passWord. These allow a connection to a site that requires username/password authentication.

Now that we have prepared the request, we just need to send it.


// Execute the request
objXMLReq.send();


At this point the object will actually go out over the Internet and bring back the contents of the target page. Now we check those contents to see what happened:

if (objXMLReq.responseText == "exists")
alert("Sorry - the User ID " + suserid + " already exists.");


If the User ID has already been assigned to another user, the page returns the word ´exists´ to indicate that the user id already exists in the database. (You could use any protocol you like - for example, the ASP page could have returned a number.) Finally we reset the cursor.

document.body.style.cursor=´auto´;


Now let´s look at the ASP page that the script is communicating with to do the lookup:

<%
Dim objConn, objRS, sUserID

´Capture the username that we need to lookup, making sure its prepared for
´our forthcoming SQL query
sUserID = Replace(Trim(Request.QueryString("userid")),"´","")

´Fire up ADO - ask the database whether or not the user idexists
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open CONNECTIONSTRING
sSQL = "select userid from usertable where userid = ´" + sUserID + "´"
Set objRS = objConn.Execute(sSQL)
If Not objRS.EOF Then Response.Write "exists"

´Clean up
objRS.Close
objConn.Close
Set objRS = Nothing
Set objConn = Nothing
%>


This is a straightforward piece of ASP code that writes out the word ´exists´ if the passed-in User ID was found in the database. If you ran this page on its own, the browser would be blank if the User ID did not exist -- the page would just say the word ´exists´ if it did exist. This means that you can test your ASP page in isolation before you integrate it back with your client script.

Dealing with timeouts


The first issue that has probably crossed your mind is ´what if the remote site is down - how do I handle timeouts and errors?´ While trapping an error from the ´send´ method is feasible, this doesn´t fix the time the user would have to wait while the call is being made.

Recall the third parameter on the ´open´ method of the XMLHTTP object. We set it to ´false´. Setting it to ´true´ will make the call immediately, and the control will drop through to the next line, so you need to either poll or be notified (i.e. event) that the call has completed (successfully or not). Luckily, the XMLHTTP object can notify the function of your choice as it moves through its various stage of processing the HTTP request. Let´s have a look at a slightly modified version of the client side script that deals with potential timeouts:


<!-define a div that will be our pseudo progress indicator -->
<div id="divProgress">Please wait</div>

<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
// Create an instance of the XML HTTP Request object
var oXMLHTTP = new ActiveXObject( "Microsoft.XMLHTTP" );
var userid;
function validateuserid(suserid) {

// Prepare the XMLHTTP object for a HTTP POST to our validation ASP page
userid = suserid;
var sURL = " http://mysite/mypath/validateuser.asp?userid=" + userid;
oXMLHTTP.open( "POST", sURL, false );

// Define an event handler for processing
oXMLHTTP.onreadystatechange = managestatechange;

// Execute the request
try {
oXMLHTTP.send();
}
catch (e) {
alert("Could not validate your User ID at this time.");
document.all.item("FirstName").focus;
}
}

function managestatechange() {
switch (oXMLHTTP.readyState) {

case 2, 3:
// Display a progress indicator of some kind, informing the
// user that you are checking to see if the UserID exists
document.all.item("divProgress").style.display = "block";
break;

case 4:
if (oXMLHTTP.responseText == "exists")
alert("Sorry - the User ID " + userid + " already exists.");
document.all.item("divProgress").style.display = "none";
break;
}
}

// Hide the progress indicator for now
document.all.item("divProgress").style.display = "none";

</script>


The code of interest here is line where we set the event handler:

// Define an event handler for processing
oXMLHTTP.onreadystatechange = managestatechange;


This tells the XMLHTTP object to call the ´managestatechange´ function as it the state of the HTTP request changes - from the time the object is created until the point where the request has completed. There are five different states that you can monitor:
0 (UNINITIALIZED) The object has been created, but not initialized (open method has not been called).
(1) LOADING The object has been created, but the send method has not been called.
(2) LOADED The send method has been called and the status and headers are available, but the response is not yet available.
(3) INTERACTIVE Some data has been received. You can call responseBody and responseText to get the current partial results.
(4) COMPLETED All the data has been received, and the complete data is available in responseBody and responseText.

- from MSDN

In the updated script, I also make it a little more robust by adding some error handling. After all, the remote site may be down or the page may not exist:


// Execute the request
try {
oXMLHTTP.send();
}
catch (e) {
alert("Could not validate your User ID at this time.");
document.all.item("FirstName").focus;
}


When the code in the callback function is finished, the control will return to the calling routine, and if a problem occurred, you can cater for it. Note that I set the focus to another field. This is important, otherwise the user would never be able to move out of the User ID field.
It is useful to note at this stage that there is another component called the ServerXMLHTTP object - see the Microsoft knowledge base article Q290761 for details about the differences between these two components. ServerXMLHTTP, as the name implies, is more suited for HTTP connectivity from the server end and is a little more elegant when dealing with timeouts. This is useful to know if you want to do some bigger and better things. This article was focused on client side validation so we focused on the XMLHTTP object since it was actually designed and optimized to be a client side component.

I hope this article has shown you how powerful the XMLHTTPRequest object from Microsoft is. Check out the MSDN Web site for more examples.


About the Author


Jonathan Zufi is the founder of UDU World (http://www.uduworld.com), a company that sells solutions based on their ActiveInbox technology. ActiveInbox is a back end information and content delivery platform that provides information access over email and mobile text messaging.

Jonathan has been developing software for over ten years. He holds an Honour´s degree in Robotics and Digital Technology from Monash University (Melbourne, Australia). He was recently awarded the Pearcey Award from the Australia Computer Society, which recognizes innovative and pioneering achievement and contribution to research and development in Information and Computer Technology across Australia. Jonathan may be reached at jonathanzufi@UDUworld.com

注重事項:
XMLHTTP提交過時返回的是亂碼----肯定許多同仁發現了!
解決:
我們在使用過程中從來不用任何非凡處理,只需在服務端asp上寫上
Response.ContentType = "text/xml"
Response.CharSet = "UTF-8" ´unicode
不管怎樣用,一定不會出亂碼。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品极品在线| 国产精品欧美日韩久久| 成人av在线亚洲| 国产亚洲一区二区精品| 亚洲成人黄色网| 亚洲人成亚洲人成在线观看| 精品久久久久久中文字幕大豆网| 国产一区玩具在线观看| 91精品久久久久| 久久91亚洲精品中文字幕奶水| 国产偷亚洲偷欧美偷精品| 青青久久av北条麻妃黑人| 欧美日韩亚洲国产一区| 日韩av在线资源| 亚洲成人av资源网| 亚洲日本成人女熟在线观看| 欧美日韩成人网| 欧美激情欧美狂野欧美精品| 992tv成人免费影院| 欧美成人四级hd版| 狠狠躁18三区二区一区| 日韩男女性生活视频| 久久久国产视频91| 日韩欧美国产视频| 91成人在线视频| 在线播放国产精品| 亚洲国产精品字幕| 欧美寡妇偷汉性猛交| 欧美性做爰毛片| 国产精品综合不卡av| 欧美成人免费全部| 欧美xxxx18国产| 91精品视频网站| 欧美激情久久久久| 国产精品一区久久| 久久精品视频导航| 国产精品wwww| 亚洲视频axxx| 国产精品一二三在线| 91精品久久久久久久久久久久久| 亚洲第一国产精品| 国产精品美腿一区在线看| 亚洲国产欧美自拍| 日韩欧美国产一区二区| 亚洲肉体裸体xxxx137| 亚洲综合在线做性| 日韩电视剧在线观看免费网站| 高跟丝袜欧美一区| 欧美午夜片欧美片在线观看| 亚洲人午夜精品免费| 亚洲精品短视频| 欧美一二三视频| 国产视频亚洲视频| 国产啪精品视频网站| 欧美一区二区三区图| 中文字幕亚洲精品| 国产精品尤物福利片在线观看| 97超碰色婷婷| 亚洲精品欧美一区二区三区| 亚洲另类欧美自拍| 欧美理论电影在线播放| 欧美成人四级hd版| 亚洲国产精品字幕| 免费不卡在线观看av| 亚洲精品网站在线播放gif| 欧美丰满老妇厨房牲生活| 亚洲第一色中文字幕| 日韩欧美精品中文字幕| 欧美另类精品xxxx孕妇| 久久久av一区| 精品国产1区2区| 国产日韩欧美在线视频观看| 国产成人在线视频| 国产伦精品一区二区三区精品视频| 久久香蕉国产线看观看av| 欧美激情国产高清| 精品日韩视频在线观看| 久久全国免费视频| 久久国内精品一国内精品| 久久在线免费观看视频| 国产精品亚洲美女av网站| 国产福利成人在线| 91精品在线看| 国产精品电影一区| 91大神福利视频在线| 国产精品偷伦视频免费观看国产| 国产91在线播放精品91| 国产精品久久久久久久app| 在线成人免费网站| 国产精品一区二区av影院萌芽| 在线观看国产精品91| 一本一本久久a久久精品牛牛影视| 日韩高清欧美高清| 亚洲欧美日韩爽爽影院| 久久精品91久久香蕉加勒比| 国产精品久久久91| 久热精品视频在线观看一区| 欧美超级免费视 在线| 欧美尺度大的性做爰视频| 成人www视频在线观看| 欧美午夜激情视频| 欧美日韩另类在线| 日韩精品免费在线视频| 日韩免费在线看| 亚洲人成免费电影| 4444欧美成人kkkk| 一本色道久久88综合亚洲精品ⅰ| 久久综合伊人77777| 成人欧美一区二区三区在线湿哒哒| 国产+成+人+亚洲欧洲| 久久69精品久久久久久久电影好| 日本高清视频精品| 久热精品在线视频| 欧美一级电影免费在线观看| 国产精品欧美日韩| 中文字幕亚洲情99在线| 一区二区成人精品| 精品久久久久久电影| 青青a在线精品免费观看| 国产精品久久久久av| 亚洲一区二区免费| 日韩精品中文字幕有码专区| 亚洲自拍偷拍色图| 在线日韩中文字幕| 色噜噜久久综合伊人一本| 最新91在线视频| 成人有码在线播放| 成人免费自拍视频| 国产女人精品视频| 北条麻妃久久精品| 亚洲精品女av网站| 欧美日韩免费在线观看| 91精品国产综合久久男男| 91免费在线视频网站| 亚洲理论片在线观看| 日韩中文字幕欧美| 最近2019中文字幕大全第二页| 久久影视电视剧免费网站清宫辞电视| 亚洲精品动漫久久久久| 国产精品免费视频久久久| 国产极品精品在线观看| 日韩性生活视频| 亚洲国产成人爱av在线播放| 欧美一区二区.| 欧美综合在线第二页| 日本成人激情视频| 欧美日韩亚洲视频| 亚洲综合色激情五月| 亚洲美女福利视频网站| 欧美日韩国产中文字幕| 欧美多人乱p欧美4p久久| 欧美在线视频在线播放完整版免费观看| 疯狂做受xxxx高潮欧美日本| 欧美日韩在线看| 亚洲国产欧美一区| 久久中文字幕国产| 亚洲最新av在线网站| 成人妇女免费播放久久久| 日韩免费视频在线观看| 91国内免费在线视频| 亚洲国产精品久久久久秋霞蜜臀| 欧美丝袜一区二区三区| 久久久久女教师免费一区| 精品国产一区二区三区久久狼黑人|