我遇到一些问题,要找到一个方法返回的对象。为简单起见,例如:
var param = { }; // global variable
var url = 'some url which executes query';
function openURL(url) {
var http_request = new XMLHttpRequest();
http_request.onreadystatechange = handle_json;
// Gets data in JSON format
http_request.open("GET", url);
http_request.send(null);
function handle_json() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var json_data = http_request.responseText; // gets text response
var obj = jQuery.parseJSON(json_data);
param = { lastID: obj.data };
if(obj.returnCodeDescription == null) {
//alert("Data updated!");
} else {
//alert("Error!");
}
} else {
alert('There was some problems! Sorry!');
}
http_request = null;
}
}
return param;
}
现在在其他一些方法中,让我们说QueryResult()我想得到对象param包含的变量。
function QueryResult {
var query = 'some query here';
var result = openURL(url+query);
alert( ??? ); **// here I would like to display the value of param.lastID**
}
我真的没有任何想法如何使这项工作。任何人都可以给我一个提示,这将帮助我从QueryResult中的openURL方法获取返回的对象吗?
答案 0 :(得分:1)
您正在尝试使用异步函数,就好像它是同步的一样。
openURL()
在调用handle_json()
之前返回其值。
您可以通过使openURL()成为异步函数来解决此问题。所以你使用openURL的函数是这样的:
function QueryResult() {
var query = 'some query here';
var result = openURL(url+query, function(param) {
alert( ??? ); **// here I would like to display the value of param.lastID**
});
}
...和openURL()将是这样的:
function openURL(url, callback) {
var http_request = new XMLHttpRequest();
http_request.onreadystatechange = handle_json;
// Gets data in JSON format
http_request.open("GET", url);
http_request.send(null);
function handle_json() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var json_data = http_request.responseText; // gets text response
var obj = jQuery.parseJSON(json_data);
// *instead of returning, call callback*
callback({ lastID: obj.data });
if(obj.returnCodeDescription == null) {
//alert("Data updated!");
} else {
//alert("Error!");
}
} else {
alert('There was some problems! Sorry!');
}
http_request = null;
}
}
}
答案 1 :(得分:0)
当事件发生时调用异步函数 - 所以它在调用外部函数之后调用。试试这个:
http://jsfiddle.net/Jacek_FH/AAQqt/
function openURL(url, callback) {
...
function handle_json() {
...
callback(param);
}
}
openURL(url, function(param){
alert(param.lastID);
});