如何在jquery中获取返回的对象?

时间:2011-08-05 23:48:57

标签: jquery object return

我遇到一些问题,要找到一个方法返回的对象。为简单起见,例如:

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方法获取返回的对象吗?

2 个答案:

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