JS Ajax onreadystatechange问题,应该不难的,比较急!谢谢 本帖最后由 zhzxlc_06 于 2011-10-17 17:23:40 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 function init(){ dojo.connect(zoonMapstationGraphicLayer, "onMouseOver", function(evt) { var attr = evt.graphic.attributes; requestZoonFoodPeriodData(attr.mainCrop1,attr.mainCrop2, attr.mainCrop3); //查询数据库操作 // 想查询完后执行下面的代码 显示数据foodArray });}里面显示数据的foodArray方法放到获取数据的地方function zoonFoodPeriod_callback() { if (ajax_req.readyState == 4) { if (ajax_req.status == 200) { var foodArray = ajax_req.responseText.split(";"); //获取foodArray //获取到数据后显示 //dosth } else { alert("HTTP error " + ajax_req.status + ": " + ajax_req.statusText); } }} 数据显示必须要在onMouseOver事件里德 例如:function init(){ dojo.connect(zoonMapstationGraphicLayer, "onMouseOver", function(evt) { var attr = evt.graphic.attributes; requestZoonFoodPeriodData(attr.mainCrop1,attr.mainCrop2, attr.mainCrop3); //查询数据库操作 document.getElementById("xxx").innerHTML = foodArray; });}红色的地方放到function zoonFoodPeriod_callback() { if (ajax_req.readyState == 4) { if (ajax_req.status == 200) { var foodArray = ajax_req.responseText.split(";"); //获取foodArraydocument.getElementById("xxx").innerHTML = foodArray; } else { alert("HTTP error " + ajax_req.status + ": " + ajax_req.statusText); } }}上面红色的地方 ajax_req.open("POST", url, false);你理解异步和同步的区别 理解了,在问您一下啊,如何设置ajax同步呢? ajax_req.open("POST", url, false);//同步ajax_req.open("POST", url, true); //异步 function requestZoonFoodPeriodData(mainCrop1,mainCrop2,mainCrop3)//function requestZoonFoodPeriodData(){ if (window.XMLHttpRequest) { ajax_ZoonFoodPeriodreq = new XMLHttpRequest(); // 创建XMLHttpRequest对象,准备向服务器发送请求并获取数据 } else if (window.ActiveXObject) { try { ajax_ZoonFoodPeriodreq = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e1) { try { ajax_ZoonFoodPeriodreq = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { ajax_ZoonFoodPeriodreq = false; } } } date = zoonGetDateTime(); year = zoonGetYearTime(); if (ajax_ZoonFoodPeriodreq != false) { var url = "ZoonFoodPeriodAjaxListen?arg0=0&mainCrop1=" + encodeURI(encodeURI(mainCrop1)) + "&mainCrop2=" + encodeURI(encodeURI(mainCrop2)) + "&mainCrop3=" + encodeURI(encodeURI(mainCrop3)) + "&dateTime=" + date + "&year=" + year; ajax_ZoonFoodPeriodreq.open("POST", url, false);// 同步方式 ajax_ZoonFoodPeriodreq.onreadystatechange = zoonFoodPeriod_callback; // 同步方式的回调函数也是用onreadystatechange吗? ajax_ZoonFoodPeriodreq.send(null); }} 改同步和异步是不是就是true改为false就可以了吗?其他代码还有哪里需要改的?function requestZoonFoodPeriodData(mainCrop1,mainCrop2,mainCrop3)//function requestZoonFoodPeriodData(){ if (window.XMLHttpRequest) { ajax_ZoonFoodPeriodreq = new XMLHttpRequest(); // 创建XMLHttpRequest对象,准备向服务器发送请求并获取数据 } else if (window.ActiveXObject) { try { ajax_ZoonFoodPeriodreq = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e1) { try { ajax_ZoonFoodPeriodreq = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { ajax_ZoonFoodPeriodreq = false; } } } date = zoonGetDateTime(); year = zoonGetYearTime(); if (ajax_ZoonFoodPeriodreq != false) { var url = "ZoonFoodPeriodAjaxListen?arg0=0&mainCrop1=" + encodeURI(encodeURI(mainCrop1)) + "&mainCrop2=" + encodeURI(encodeURI(mainCrop2)) + "&mainCrop3=" + encodeURI(encodeURI(mainCrop3)) + "&dateTime=" + date + "&year=" + year; ajax_ZoonFoodPeriodreq.open("POST", url, false);// 同步方式 ajax_ZoonFoodPeriodreq.onreadystatechange = zoonFoodPeriod_callback; ajax_ZoonFoodPeriodreq.send(null); }}function zoonFoodPeriod_callback() { if (ajax_ZoonFoodPeriodreq.readyState == 4) // 从服务器返回的HTTP响应已经被完全接受 { if (ajax_ZoonFoodPeriodreq.status == 200) { // 请求成功,服务器返回的HTTP响应代码为200 var foodArray = ajax_ZoonFoodPeriodreq.responseText.split(";"); get_ZoonFoodPeriodreq(foodArray); } else { alert("HTTP error " + ajax_ZoonFoodPeriodreq.status + ": " + ajax_ZoonFoodPeriodreq.statusText); } }} ajax_ZoonFoodPeriodreq.open("POST", url, false);// 同步方式ajax_ZoonFoodPeriodreq.send(null);var foodArray = ajax_ZoonFoodPeriodreq.responseText.split(";");get_ZoonFoodPeriodreq(foodArray);接着写 5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好参考ajax对象常用属性,事件,方法大小写问题的总结 讲获取数据后执行的方法放到红色的地方就可以了啊,那是回调函数function zoonFoodPeriod_callback() { if (ajax_req.readyState == 4) { if (ajax_req.status == 200) { var foodArray = ajax_req.responseText.split(";"); //获取foodArray //获取数据执行方法 } else { alert("HTTP error " + ajax_req.status + ": " + ajax_req.statusText); } }} 都在搞什么呢?显示的主要直接在if (ajax_req.status == 200) { var foodArray = ajax_req.responseText.split(";"); //获取foodArray//获取数据执行方法 } 在这个地方做处理不久 完了么? ext3.x+swfupload + struts1.2 上传文件的问题! jquery 得到元素数组在POST至PHP的问题 点击.menu a让iframe 的scrolling属性显示或隐藏 Jquery如何做这个类似CoverFlow的效果 新手问题 关于JSP中下拉列表框的问题!!!! 请大侠们帮忙, 如何用javascript实现用户在注册的时候不允许填汉字 嵌套框架问题 请教 100分 跪扣 请教javascript中的错误处理 判断当前时间是否大于10点的问题 用Jquery怎么控制div层的显示、消失? Ext的Toolbar的一个问题
{
dojo.connect(zoonMapstationGraphicLayer,
"onMouseOver",
function(evt) {
var attr = evt.graphic.attributes; requestZoonFoodPeriodData(attr.mainCrop1,attr.mainCrop2, attr.mainCrop3); //查询数据库操作 // 想查询完后执行下面的代码
显示数据foodArray });
}
里面显示数据的foodArray方法放到获取数据的地方function zoonFoodPeriod_callback() {
if (ajax_req.readyState == 4)
{
if (ajax_req.status == 200) {
var foodArray = ajax_req.responseText.split(";"); //获取foodArray
//获取到数据后显示
//dosth
} else {
alert("HTTP error " + ajax_req.status + ": " + ajax_req.statusText);
}
}
}
function init()
{
dojo.connect(zoonMapstationGraphicLayer,
"onMouseOver",
function(evt) {
var attr = evt.graphic.attributes; requestZoonFoodPeriodData(attr.mainCrop1,attr.mainCrop2, attr.mainCrop3); //查询数据库操作 document.getElementById("xxx").innerHTML = foodArray; });
}
红色的地方放到function zoonFoodPeriod_callback() {
if (ajax_req.readyState == 4)
{
if (ajax_req.status == 200) {
var foodArray = ajax_req.responseText.split(";"); //获取foodArray
document.getElementById("xxx").innerHTML = foodArray;
} else {
alert("HTTP error " + ajax_req.status + ": " + ajax_req.statusText);
}
}
}
上面红色的地方
你理解异步和同步的区别
ajax_req.open("POST", url, true); //异步
//function requestZoonFoodPeriodData()
{
if (window.XMLHttpRequest) {
ajax_ZoonFoodPeriodreq = new XMLHttpRequest(); // 创建XMLHttpRequest对象,准备向服务器发送请求并获取数据
} else if (window.ActiveXObject) {
try {
ajax_ZoonFoodPeriodreq = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e1) {
try {
ajax_ZoonFoodPeriodreq = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
ajax_ZoonFoodPeriodreq = false;
}
}
}
date = zoonGetDateTime();
year = zoonGetYearTime(); if (ajax_ZoonFoodPeriodreq != false) {
var url = "ZoonFoodPeriodAjaxListen?arg0=0&mainCrop1="
+ encodeURI(encodeURI(mainCrop1)) + "&mainCrop2="
+ encodeURI(encodeURI(mainCrop2)) + "&mainCrop3="
+ encodeURI(encodeURI(mainCrop3)) + "&dateTime=" + date
+ "&year=" + year;
ajax_ZoonFoodPeriodreq.open("POST", url, false);// 同步方式
ajax_ZoonFoodPeriodreq.onreadystatechange = zoonFoodPeriod_callback; // 同步方式的回调函数也是用onreadystatechange吗?
ajax_ZoonFoodPeriodreq.send(null);
}
}
function requestZoonFoodPeriodData(mainCrop1,mainCrop2,mainCrop3)
//function requestZoonFoodPeriodData()
{
if (window.XMLHttpRequest) {
ajax_ZoonFoodPeriodreq = new XMLHttpRequest(); // 创建XMLHttpRequest对象,准备向服务器发送请求并获取数据
} else if (window.ActiveXObject) {
try {
ajax_ZoonFoodPeriodreq = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e1) {
try {
ajax_ZoonFoodPeriodreq = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
ajax_ZoonFoodPeriodreq = false;
}
}
}
date = zoonGetDateTime();
year = zoonGetYearTime(); if (ajax_ZoonFoodPeriodreq != false) {
var url = "ZoonFoodPeriodAjaxListen?arg0=0&mainCrop1="
+ encodeURI(encodeURI(mainCrop1)) + "&mainCrop2="
+ encodeURI(encodeURI(mainCrop2)) + "&mainCrop3="
+ encodeURI(encodeURI(mainCrop3)) + "&dateTime=" + date
+ "&year=" + year;
ajax_ZoonFoodPeriodreq.open("POST", url, false);// 同步方式
ajax_ZoonFoodPeriodreq.onreadystatechange = zoonFoodPeriod_callback;
ajax_ZoonFoodPeriodreq.send(null);
}
}function zoonFoodPeriod_callback() {
if (ajax_ZoonFoodPeriodreq.readyState == 4) // 从服务器返回的HTTP响应已经被完全接受
{
if (ajax_ZoonFoodPeriodreq.status == 200) { // 请求成功,服务器返回的HTTP响应代码为200
var foodArray = ajax_ZoonFoodPeriodreq.responseText.split(";");
get_ZoonFoodPeriodreq(foodArray);
} else {
alert("HTTP error " + ajax_ZoonFoodPeriodreq.status + ": " + ajax_ZoonFoodPeriodreq.statusText);
}
}
}
ajax_ZoonFoodPeriodreq.send(null);
var foodArray = ajax_ZoonFoodPeriodreq.responseText.split(";");
get_ZoonFoodPeriodreq(foodArray);
接着写
如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好参考
ajax对象常用属性,事件,方法大小写问题的总结
function zoonFoodPeriod_callback() {
if (ajax_req.readyState == 4)
{
if (ajax_req.status == 200) {
var foodArray = ajax_req.responseText.split(";"); //获取foodArray
//获取数据执行方法
} else {
alert("HTTP error " + ajax_req.status + ": " + ajax_req.statusText);
}
}
}
显示的主要直接在
if (ajax_req.status == 200) {
var foodArray = ajax_req.responseText.split(";"); //获取foodArray
//获取数据执行方法
}
在这个地方做处理不久 完了么?