/********************************************************************************* * * Description : AJAX engine (Browser crossed) * Copyright : Copyright(c) 2007 * Company : Tencent Inc. * * @author Moky * @version 1.0 2007-11-27 * *********************************************************************************/ /** * * @param * * @return aRequest */ function createHttpRequest() { var httpRequest = null; if (window.XMLHttpRequest) { try { //netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); } catch (e) { } } if (typeof XMLHttpRequest != "undefined") { httpRequest = new XMLHttpRequest(); } else if (window.ActiveXObject) { // IE var arr = [ 'MSXML3.XMLHTTP', // 'MSXML2.XMLHTTP.6.0', // 'MSXML2.XMLHTTP.5.0', // 'MSXML2.XMLHTTP.4.0', // 'MSXML2.XMLHTTP.3.0', // 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP', // 'MSXML2.DOMDocument.6.0', // 'MSXML2.DOMDocument.5.0', // 'MSXML2.DOMDocument.4.0', // 'MSXML2.DOMDocument.3.0', // 'MSXML2.DOMDocument', // 'MSXML3.DOMDocument', // 'Microsoft.XMLDOM', null]; for (var i = 0; i < arr.length; i++) { try { return new ActiveXObject(arr[i]); } catch(e) { } } } else if (window.XMLHttpRequest) { // Mozilla, Safari, httpRequest = new XMLHttpRequest(); if (httpRequest.readyState == null) { httpRequest.readyState = 1; httpRequest.addEventListener("load", function () { httpRequest.readyState = 4; if (typeof httpRequest.onreadystatechange == "function") { httpRequest.onreadystatechange(); } }, false); } } // end of if (typeof XMLHttpRequest != "undefined") if (!httpRequest) { alert("httpRequest not created"); } return httpRequest; } /** * * @param request -- a valid request * @param url -- an exists URL * @param callback -- callback handler * * @return none */ function sendHttpRequest(argv) { if (!argv) return ; var request = argv.request; var url = argv.url; var post_data = argv.post_data; var charset = argv.charset; var callback = argv.callback; if (!charset) { charset = 'utf-8'; } if (!request) { request = createHttpRequest(); if (!request) { alert("cannot create XmlHttpRequest object"); return ; } } if (!url) { alert("url is emply"); return ; } url = correct_url(url); /* var arr = url.split('?', 2); if (arr.length == 2) { url = arr[0]; if (!post_data) { post_data = arr[1]; } else { post_data += '&' + arr[1]; } } */ if (!post_data) { request.open("GET", url, true); request.setRequestHeader('Content-Type', 'text/plain; charset=' + charset); post_data = null; } else { request.open("POST", url, true); request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=' + charset); } request.onreadystatechange = function() { try { if (callback && request.readyState == 4 && request.status == 200) { callback(request.responseText); } } catch (e) { } }; request.send(post_data); } function correct_url(s) { if (!s || s.indexOf('://') > 0) return s; var url_pre = document.location.href; var url_end = s; if (url_end.substring(0, 1) == '/') { url_pre = url_pre.substring(0, url_pre.indexOf('/', url_pre.indexOf('://') + 3)); url_end = url_end.substring(1); } else { url_pre = url_pre.substring(0, url_pre.lastIndexOf('/')); while (url_end.substring(0, 3) == '../') { url_pre = url_pre.substring(0, url_pre.lastIndexOf('/')); url_end = url_end.substring(3); } } return url_pre + '/' + url_end; }