本帖最后由 zhzxlc_06 于 2011-10-17 17:23:40 编辑

解决方案 »

  1.   

    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);
            }
        }
    }
      

  2.   

    数据显示必须要在onMouseOver事件里德
      

  3.   

    例如:
    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);
      }
      }
    }
    上面红色的地方
      

  4.   

    ajax_req.open("POST", url, false);
    你理解异步和同步的区别
      

  5.   

    理解了,在问您一下啊,如何设置ajax同步呢?
      

  6.   

    ajax_req.open("POST", url, false);//同步
    ajax_req.open("POST", url, true); //异步
      

  7.   

    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);
    }
    }
      

  8.   

    改同步和异步是不是就是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);
    }
    }
    }
      

  9.   

    ajax_ZoonFoodPeriodreq.open("POST", url, false);// 同步方式
    ajax_ZoonFoodPeriodreq.send(null);
    var foodArray = ajax_ZoonFoodPeriodreq.responseText.split(";");
    get_ZoonFoodPeriodreq(foodArray);
    接着写
      

  10.   

    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好参考
    ajax对象常用属性,事件,方法大小写问题的总结
      

  11.   

    讲获取数据后执行的方法放到红色的地方就可以了啊,那是回调函数
    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);
      }
      }
    }
      

  12.   

    都在搞什么呢?
    显示的主要直接在
    if (ajax_req.status == 200) {
      var foodArray = ajax_req.responseText.split(";"); //获取foodArray
    //获取数据执行方法
      } 
    在这个地方做处理不久 完了么?