Javascript 需要操纵全局var,但可以';t在Ajax中。需要一个解决办法吗

Javascript 需要操纵全局var,但可以';t在Ajax中。需要一个解决办法吗,javascript,jquery,Javascript,Jquery,这是我的一点问题代码的粘贴 我试图在jQuery.get回调函数中操作一个全局变量“data”,以便格式化数据并在需要时返回该数据 但是,由于Ajax是异步的,回调函数中根本不会操纵这个全局变量 如何从数据库中获取所需的信息,并最终将其返回到变量中,就像我在代码中所做的那样 任何方向都将不胜感激 谢谢如果访问回调函数中的数据变量会怎么样 function mapPoints() { var url = '../common/ajax/get_map_points.php'; v

这是我的一点问题代码的粘贴

我试图在jQuery.get回调函数中操作一个全局变量“data”,以便格式化数据并在需要时返回该数据

但是,由于Ajax是异步的,回调函数中根本不会操纵这个全局变量

如何从数据库中获取所需的信息,并最终将其返回到变量中,就像我在代码中所做的那样

任何方向都将不胜感激


谢谢

如果访问
回调
函数中的数据变量会怎么样

function mapPoints()
{
    var url = '../common/ajax/get_map_points.php'; 
    var map = {}; 
     $.get( url, map, recieve_map_points,function(data){
          console.log(data);         
          return data;
     });       
}

如果你那样做会更好

function mapPoints() {
    var url = '../common/ajax/get_map_points.php'; 
        map = {}; 

     $.get( url, map, recieve_map_points,function(data){
         getMyData(data);  // call function when you receive data
     });       
}

function getMyData(data) {
  // make something with data
}

我认为您错过了
异步
回调
你知道这些词,但你不知道如何处理这些行为

asynchroneus意味着您必须使用回调-»意味着您的代码必须是高效的,您不必把事情一件接一件地放在其他事情之后。您有函数,所有这些函数都做一件事,并在完成它们的任务后调用指定的回调

您需要做的不是期望mapPoints返回,而是在完成数据操作后调用
回调
函数

这只是一个使用回调的小例子

function displayPoint(data) {
    //display all the points
}

function callServer(callback {
    ajaxCall(url, function(data) { dataHandler(data, callback); } );
}

function dataHandler(data, callback) {
    // modify data

    callback(data);
}


// process
callServer(displayPoint); 

/***
call callServer by passing displayPoint as callback
callServer will perform the ajax call.
The result will be handle by the anonymus function.
This function just call the dataHandler function, passing it the datas from the server, and the callback function given to callServer ( so displayPoint )
dataHandler will modify the datas, then call the callback function, passing it the datas.

YOU DON'T NEED GLOBAL VAR ANYMORE, and that is a really good thing
***/

我将进一步阐述Shyju所说的内容

首先,ajax是否异步不是问题所在。您可以通过使用
asynch:false
并使用同步请求来禁用它

这里的问题是您希望如何访问和操作返回到服务器的数据。这是关键

让我们分析一下在哪里进行更改

$.get( url, map, receive_map_points){});
在上面的回调中,必须使用函数声明进行访问,您不能用为自己创建的另一个函数替换此声明,相反,您可以命名对象,并将其传递给另一个函数,以使对象内的数据得到处理。这里的关键元素是,我们需要确保
将对象作为JSON编码的数组发送回去

jQuery.get( url, map, function(data){
  //access the data as a json object, extract what we need
  var ddoc = data.doc;
  var dtextrank = data.textrank;

  //pass the newly created data to our function, and have the function extract what it needs.
  receive_map_points(ddoc, dtextrank);
});

function receive_map_points(doc, textrank){
  //same code you used originally.
}
正如您在上面所看到的,我们不需要更改receive_map_points函数中的任何代码,但我们确实需要更改作为JSON编码数组发送回函数的
数据,php中的示例如下:

json_encode(array("doc" => "something", "textrank" => "something else"));

希望这有帮助。

什么时候调用函数mapPoints()?失败的
数据=
在哪里?