JX небольшая, понятная, простая библиотека AJAX. Она поддерживает методы GET и POST. Умеет работать с возвращаемыми данными TEXT (простой текст) и JSON.
Добавил: Amro Дата: 17.10.2014 00:01
Добавил: Amro Дата: 17.10.2014 00:01
JX небольшая, понятная, простая библиотека AJAX. Она поддерживает методы GET и POST. Умеет работать с возвращаемыми данными TEXT (простой текст) и JSON.
//V3.01.A - http://www.openjs.com/scripts/jx/
jx = {
//Create a xmlHttpRequest object - this is the constructor.
getHTTPObject : function() {
var http = false;
//Use IE's ActiveX items to load the file.
if(typeof ActiveXObject != 'undefined') {
try {http = new ActiveXObject("Msxml2.XMLHTTP");}
catch (e) {
try {http = new ActiveXObject("Microsoft.XMLHTTP");}
catch (E) {http = false;}
}
//If ActiveX is not available, use the XMLHttpRequest of Firefox/Mozilla etc. to load the document.
} else if (window.XMLHttpRequest) {
try {http = new XMLHttpRequest();}
catch (e) {http = false;}
}
return http;
},
// This function is called from the user's script.
//Arguments -
// url - The url of the serverside script that is to be called. Append all the arguments to
// this url - eg. 'get_data.php?id=5&car=benz'
// callback - Function that must be called once the data is ready.
// format - The return type for this function. Could be 'xml','json' or 'text'. If it is json,
// the string will be 'eval'ed before returning it. Default:'text'
// method - GET or POST. Default 'GET'
load : function (url,callback,format,method, opt) {
var http = this.init(); //The XMLHttpRequest object is recreated at every call - to defeat Cache problem in IE
if(!http||!url) return;
//XML Format need this for some Mozilla Browsers
if (http.overrideMimeType) http.overrideMimeType('text/xml');
if(!method) method = "GET";//Default method is GET
if(!format) format = "text";//Default return type is 'text'
if(!opt) opt = {};
format = format.toLowerCase();
method = method.toUpperCase();
//Kill the Cache problem in IE.
var now = "uid=" + new Date().getTime();
url += (url.indexOf("?")+1) ? "&" : "?";
url += now;
var parameters = null;
if(method=="POST") {
var parts = url.split("\?");
url = parts[0];
parameters = parts[1];
}
http.open(method, url, true);
if(method=="POST") {
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", parameters.length);
http.setRequestHeader("Connection", "close");
}
var ths = this;// Closure
if(opt.handler) { //If a custom handler is defined, use it
http.onreadystatechange = function() { opt.handler(http); };
} else {
http.onreadystatechange = function () {//Call a function when the state changes.
if (http.readyState == 4) {//Ready State will be 4 when the document is loaded.
if(http.status == 200) {
var result = "";
if(http.responseText) result = http.responseText;
//If the return is in JSON format, eval the result before returning it.
if(format.charAt(0) == "j") {
//\n's in JSON string, when evaluated will create errors in IE
result = result.replace(/[\n\r]/g,"");
result = eval('('+result+')');
} else if(format.charAt(0) == "x") { //XML Return
result = http.responseXML;
}
//Give the data to the callback function.
if(callback) callback(result);
} else {
if(opt.loadingIndicator) document.getElementsByTagName("body")[0].removeChild(opt.loadingIndicator); //Remove the loading indicator
if(opt.loading) document.getElementById(opt.loading).style.display="none"; //Hide the given loading indicator.
if(error) error(http.status);
}
}
}
}
http.send(parameters);
},
bind : function(user_options) {
var opt = {
'url':'', //URL to be loaded
'onSuccess':false, //Function that should be called at success
'onError':false, //Function that should be called at error
'format':"text", //Return type - could be 'xml','json' or 'text'
'method':"GET", //GET or POST
'update':"", //The id of the element where the resulting data should be shown.
'loading':"", //The id of the loading indicator. This will be set to display:block when the url is loading and to display:none when the data has finished loading.
'loadingIndicator':"" //HTML that would be inserted into the document once the url starts loading and removed when the data has finished loading. This will be inserted into a div with class name 'loading-indicator' and will be placed at 'top:0px;left:0px;'
}
for(var key in opt) {
if(user_options[key]) {//If the user given options contain any valid option, ...
opt[key] = user_options[key];// ..that option will be put in the opt array.
}
}
if(!opt.url) return; //Return if a url is not provided
var div = false;
if(opt.loadingIndicator) { //Show a loading indicator from the given HTML
div = document.createElement("div");
div.setAttribute("style","position:absolute;top:0px;left:0px;");
div.setAttribute("class","loading-indicator");
div.innerHTML = opt.loadingIndicator;
document.getElementsByTagName("body")[0].appendChild(div);
this.opt.loadingIndicator=div;
}
if(opt.loading) document.getElementById(opt.loading).style.display="block"; //Show the given loading indicator.
this.load(opt.url,function(data){
if(opt.onSuccess) opt.onSuccess(data);
if(opt.update) document.getElementById(opt.update).innerHTML = data;
if(div) document.getElementsByTagName("body")[0].removeChild(div); //Remove the loading indicator
if(opt.loading) document.getElementById(opt.loading).style.display="none"; //Hide the given loading indicator.
},opt.format,opt.method, opt);
},
init : function() {return this.getHTTPObject();}
}
Пример использования
jx.load('data.php?fetch=true&num=42&name=marvin',function(data){
/*
... do what you want with 'data' variable ...
*/
},'text','post');
comments powered by HyperComments