这是我陷入困境的代码的一点粘贴。
我正在尝试在 jQuery.get 回调函数中操作全局变量“数据”,以便格式化数据并在需要的地方返回此数据。
然而,这个全局变量在回调函数中根本没有被操纵,这很可能是由于 Ajax 是异步的。
如何从数据库中获取我需要的信息并最终将其返回到变量中,就像我在这段代码中尝试做的那样?
任何方向将不胜感激!
谢谢
这是我陷入困境的代码的一点粘贴。
我正在尝试在 jQuery.get 回调函数中操作全局变量“数据”,以便格式化数据并在需要的地方返回此数据。
然而,这个全局变量在回调函数中根本没有被操纵,这很可能是由于 Ajax 是异步的。
如何从数据库中获取我需要的信息并最终将其返回到变量中,就像我在这段代码中尝试做的那样?
任何方向将不胜感激!
谢谢
我认为你错过了要点asynchroneus
并且callback
你知道这些话,但你不知道如何处理这些行为。
asynchreus 意味着你必须使用回调 -» 意味着你的代码必须是高效的,你不要把事情一个接一个地放在后面。你有函数,所有这些函数都做一件事,当它们完成它们应该做的事情时调用指定的回调。
您要做的不是期望从您的 mapPoints 返回,而是callback
在您完成操作数据时调用一个函数。
只是一个使用回调的小例子
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
***/
如果您访问callback
函数内部的数据变量怎么办?
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
}
我将详细说明Shyju所说的内容。
首先,ajax 是否是异步的不是问题。您始终可以通过使用asynch: false
和拥有同步请求来禁用它。
这里的问题是您希望如何访问和操作返回到服务器的数据。这是关键部分。
让我们分解在哪里进行更改
$.get( url, map, receive_map_points){});
在上面的回调中,必须使用函数声明来访问,你不能用你自己创建的另一个函数替换这个声明,相反,你可以命名对象,并将它传递给另一个函数来操作对象中保存的数据. 这里的关键要素是我们需要确保我们send the object back as a JSON encoded array
.
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 函数中的任何代码,但我们确实需要更改data being sent back to the function as a JSON encoded array
php 中的示例:
json_encode(array("doc" => "something", "textrank" => "something else"));
希望这可以帮助。