直接获得Ajax返回值 博客分类: Ajax AjaxDWRMicrosoft浏览器Servlet
程序员文章站
2024-03-23 19:38:40
...
1、直接获得DWR返回值,不用写回调函数
//创建对象
function DwrObject(){
//后台类使用的参数,公有属性
this.param1="";
this.param2="";
this.param3="";
//私有属性
var result = "";
this.getResult=function(){
DWREngine.setAsync(false);
yourDWRClass.methodName(this.param1,this.param2,this.param3,
function(data){result = data;});
DWREngine.setAsync(true);
return result;
}
}
//调用
function yourMethod(){
var dwrObject = new DwrObject();
dwrObject.param1="内容";
dwrObject.param2="内容";
dwrObject.param3="内容";
alert("返回结果:" + dwrObject.getResult());
}
特点:不需要action参与,直接调用后台类,可以避免表单提交时get方法带来的内容有限的限制。
2、使用原生态Ajax直接获得返回值
//定义对象
var result="";
function textHandler(text){
result=text;
}
function requestURL(urlstr){
var xmlhttp = getXMLHttpRequest();
var handlerFunction = getReadyStateHandler(xmlhttp,textHandler);
xmlhttp.onreadystatechange = handlerFunction;
xmlhttp.open("GET", urlstr, false);
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlhttp.send(null);
return result;
}
function getXMLHttpRequest() {
var xmlreq = false;
result="";
if (window.XMLHttpRequest) {
// 在非Microsoft浏览器中创建XMLHttpRequest对象
xmlreq = new XMLHttpRequest();
} else if (window.ActiveXObject) {
//通过MS ActiveX创建XMLHttpRequest
try {
// 尝试按新版InternetExplorer方法创建
xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e1) {
// 创建请求的ActiveX对象失败
try {
// 尝试按老版InternetExplorer方法创建
xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
// 不能通过ActiveX创建XMLHttpRequest
}
}
}
return xmlreq;
}
function getReadyStateHandler(req,responseTextHandler) {
// 返回一个监听XMLHttpRequest实例的匿名函数
return function () {
// 如果请求的状态是 完成
if (req.readyState == 4) {
// 检查是否成功接收了服务器响应
if (req.status == 200) {
// 将载有响应信息的XML传递到处理函数
responseTextHandler(req.responseText);
} else {
// 有HTTP问题发生
// alert("HTTP error: "+req.status);
return false;
}
}
}
}
//使用
var url="你的请求路径(urld地址,servlet,action)";
var result = requestURL(url);
alert("返回结果:" + result);
特点:依赖url请求,通过后台输出流返回结果,会因为form的get方法限制提交内容。
//创建对象
function DwrObject(){
//后台类使用的参数,公有属性
this.param1="";
this.param2="";
this.param3="";
//私有属性
var result = "";
this.getResult=function(){
DWREngine.setAsync(false);
yourDWRClass.methodName(this.param1,this.param2,this.param3,
function(data){result = data;});
DWREngine.setAsync(true);
return result;
}
}
//调用
function yourMethod(){
var dwrObject = new DwrObject();
dwrObject.param1="内容";
dwrObject.param2="内容";
dwrObject.param3="内容";
alert("返回结果:" + dwrObject.getResult());
}
特点:不需要action参与,直接调用后台类,可以避免表单提交时get方法带来的内容有限的限制。
2、使用原生态Ajax直接获得返回值
//定义对象
var result="";
function textHandler(text){
result=text;
}
function requestURL(urlstr){
var xmlhttp = getXMLHttpRequest();
var handlerFunction = getReadyStateHandler(xmlhttp,textHandler);
xmlhttp.onreadystatechange = handlerFunction;
xmlhttp.open("GET", urlstr, false);
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlhttp.send(null);
return result;
}
function getXMLHttpRequest() {
var xmlreq = false;
result="";
if (window.XMLHttpRequest) {
// 在非Microsoft浏览器中创建XMLHttpRequest对象
xmlreq = new XMLHttpRequest();
} else if (window.ActiveXObject) {
//通过MS ActiveX创建XMLHttpRequest
try {
// 尝试按新版InternetExplorer方法创建
xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e1) {
// 创建请求的ActiveX对象失败
try {
// 尝试按老版InternetExplorer方法创建
xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
// 不能通过ActiveX创建XMLHttpRequest
}
}
}
return xmlreq;
}
function getReadyStateHandler(req,responseTextHandler) {
// 返回一个监听XMLHttpRequest实例的匿名函数
return function () {
// 如果请求的状态是 完成
if (req.readyState == 4) {
// 检查是否成功接收了服务器响应
if (req.status == 200) {
// 将载有响应信息的XML传递到处理函数
responseTextHandler(req.responseText);
} else {
// 有HTTP问题发生
// alert("HTTP error: "+req.status);
return false;
}
}
}
}
//使用
var url="你的请求路径(urld地址,servlet,action)";
var result = requestURL(url);
alert("返回结果:" + result);
特点:依赖url请求,通过后台输出流返回结果,会因为form的get方法限制提交内容。