AJAX问题返回值

时间:2014-04-29 17:15:22

标签: javascript ajax

我正在使用调用另一个javascript函数(zConvertEmplidtoRowid)的javascript函数,该函数使用运行查询的ajax调用来返回变量(rowid)中的数据。我的问题是我不知道如何将数据返回到原始函数。

这是调用ajax函数的原始函数的片段(zConvertEmplidtoRowid)

var rowid = zConvertEmplidtoRowid(emplid);
//the alert should show what the query via ajax returned
alert(rowid);
zEmployeePortrait(emplid, ajaxlink);
}

这是ajax函数......我想在这里的某个地方我需要放回,但我之前从未使用过ajax,所以我不确定。

function zConvertEmplidtoRowid(emplid, ajaxlink, callback) {

  if (typeof XMLHttpRequest == 'undefined') {
            XMLHttpRequest = function() {
                try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch(e) {}
                try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch(e) {}
                try { return new ActiveXObject("Msxml2.XMLHTTP"); }     catch(e) {}
                try { return new ActiveXObject("Microsoft.XMLHTTP"); }  catch(e) {}

            throw new Error('This browser does not support XMLHttpRequest or XMLHTTP.');
            };
        }
  var request = new XMLHttpRequest();
  request.onreadystatechange = function() {
    if (request.readyState == 4 && request.status == 200) {
      var rowid = request.responseText;
      callback(rowid);
    }    
  }

  var ajax_link = ajax_link + "?emplid=" + emplid;
  request.open('GET', ajax_link);
  request.send();
}

2 个答案:

答案 0 :(得分:2)

正如@epascarello指出的那样,ajax调用是异步的,你编写的代码期望调用以同步的方式返回。

您有两种选择:

1)使ajax调用同步(我强烈建议不要采用这种方式)。

2)将回调函数作为参数传递给进行ajax调用的函数,然后在调用返回后调用回调函数。

e.g:

function zConvertEmplidtoRowid(emplid, ajaxlink, callback) { //Added a callback function parameter

  if (typeof XMLHttpRequest == 'undefined') {
            XMLHttpRequest = function() {
                try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch(e) {}
                try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch(e) {}
                try { return new ActiveXObject("Msxml2.XMLHTTP"); }     catch(e) {}
                try { return new ActiveXObject("Microsoft.XMLHTTP"); }  catch(e) {}

            throw new Error('This browser does not support XMLHttpRequest or XMLHTTP.');
            };
        }
  var request = new XMLHttpRequest();
  request.onreadystatechange = function() {
    if (request.readyState == 4 && request.status == 200) {
      var rowid = request.responseText;
            //now you invoke the callback passing the rowid as argument
            callback(rowid);
    }    
  }

  var ajax_link = ajax_link + "?emplid=" + emplid;
  request.open('GET', ajax_link);
  request.send();
}

zConvertEmplidtoRowid(emplid, ajaxlink, function(rowId) {
    alert(rowId);
    zEmployeePortrait(emplid, ajaxlink);
});

答案 1 :(得分:0)

正如epascarello在他的评论中暗示的那样,你需要同步进行javascript调用以获得返回值......

我倾向于使用jquery来协助通话,但快速谷歌建议你可以通过改变来实现:

request.open(' GET',ajax_link);

为:

request.open(' GET',ajax_link,false);

然后可以通过以下方式访问响应:

request.responseText

取自此处:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests