prettify

baseline

Ajax Javascript

How to call an ajax service from a web page using
  • Javascript
  • XMLHttpRequest
  • POST
The server side implementation using C# is in another post.
Ajax.htm
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8" />
  5.     <title>Ajax</title>
  6. <script src="Ajax.js" type="text/javascript"></script>
  7. <script type="text/javascript">
  8.     var oM = {
  9.         "nA": 0,
  10.         "nB": 0,
  11.         "nResult": 0,
  12.         "toString": function () {
  13.             return this.nA.toString() + "\t" + this.nB.toString();
  14.         },
  15.         Parse: function (oResult) {
  16.             this.nResult = oResult[0];

  17.         },
  18.         Calc: function (fCb, ErCb) {
  19.             var that = this;
  20.             this.CalcRe = function (oResult) {
  21.                 that.Parse(oResult);
  22.                 fCb();
  23.             };
  24.             var sObject = "Mathematics";
  25.             var sAction = "sum";
  26.             ins.Post(sObject, sAction, this.toString(), this.CalcRe, ErCb);
  27.         }
  28.     };
  29.     var oC = {
  30.         Start: function () {
  31.             $("btnSum").onclick = function () {
  32.                 oV.Read();
  33.                 oM.Calc(oV.Show);
  34.             };
  35.         }
  36.     };
  37.     var oV = {
  38.         Read: function () {
  39.             oM.nA = parseInt($("txtA").value, 10) || 0;
  40.             oM.nB = parseInt($("txtB").value, 10) || 0;
  41.         },
  42.         Show: function () {
  43.             $("tdSum").innerHTML = oM.nResult.toString();
  44.         }
  45.     };
  46.     window.onload=oC.Start;
  47. </script>
  48. </head>
  49. <body>
  50. <table>
  51. <tr><td><label for="txtA">1st Number</label></td><td><input type="number" id="txtA" value="7" /></td></tr>
  52. <tr><td><label for="txtB">2nd Number</label></td><td><input type="number" id="txtB" value="11" /></td></tr>
  53. <tr><td><button id="btnSum" style="width:100%;">Sum</button></td><td id="tdSum"></td></tr>
  54. </table>
  55. </body>
  56. </html>
Ajax.js

var $ = function (sId) { return document.getElementById(sId); };
if (typeof ins !== "object") var ins={};
ins
.sPostUrl = "../aj.ashx";
ins
.nPostTimeout = 50000;
ins
.Post = function (sObject, sAction, sData, cb, cbError) {
   
//sData = ins.oUser.toString() + "\n" + sObject + "\n" + sAction + "\n" + sData;
    sData
= sObject + "\n" + sAction + "\n" + sData;
   
var oX = new XMLHttpRequest();
    oX
.onreadystatechange = function () {
       
switch (oX.readyState) {
           
case 1:
           
case 2:
           
case 3:
               
break;
           
case 4:
               
if (oX.status == 200) {
                    clearTimeout
(oTim);
                   
if (oX.responseText && oX.responseText === "{nError:1}") {
                        alert
("Please Log In!");
                       
//ins.oUser.Login();
                       
return;
                   
}
                   
if (cb) {
                       
var sHeader, nPos, aHeaders =
                            oX
.getAllResponseHeaders().replace("\r", "").split("\n");
                       
var oHeaders = {};
                       
for (var nHeader = aHeaders.length - 1; nHeader >= 0; nHeader--) {
                            sHeader
= aHeaders[nHeader];
                            nPos
= sHeader.indexOf(": "); //split nogood: Date has more ":"
                           
if (nPos >= 0) {
                                oHeaders
[sHeader.substring(0, nPos)] =
                                         sHeader
.substring(nPos + 2);
                           
} else {
                                oHeaders
[sHeader] = "";
                           
}
                       
}
                       
var sType = (oHeaders["Content-Type"] ?
                                     oHeaders
["Content-Type"].split(";")[0] : "");
                       
var oResult = null;
                       
if ("application/javascript" === sType) {
                           
if ((typeof JSON === "undefined") ||
                               
(typeof JSON.parse === "undefined")) {
                                oResult
= eval("(" + oX.responseText + ")");
                           
} else {
                                oResult
= JSON.parse(oX.responseText);
                           
}
                           
if (typeof oResult[0] === "string" && oResult[0] === "Error") {
                               
if (cbError) cbError(oResult[1]);
                           
} else {
                                cb
(oResult);
                           
}
                       
} else {
                            cb
(oX.responseText);
                       
}
                   
}
               
} else {
                   
if (cbError) cbError(oX.status, oX.statusText);
               
}
               
break;
       
}
   
};
    oX
.open("POST", ins.sPostUrl, true);
    oX
.setRequestHeader("Content-Type", "text/plain;charset=utf-8");
    oX
.setRequestHeader("Content-Length", sData.length);
    oX
.setRequestHeader("Connection", "close");
    oX
.send(sData);
   
var oTim = setTimeout(function () {
        oX
.abort();
        alert
("Connection Timeout!");
   
}, ins.nPostTimeout);
};

No comments:

Post a Comment