将onload函数的结果传递给变量

时间:2012-03-16 14:30:57

标签: javascript titanium titanium-mobile

这是我的iPhone应用程序中的一个模块。它的目的是从JSON responeText返回一个数组,然后可以将其添加到另一个模块中TableView的data属性中。

相对较新的JavaScript我无法找到正确的语法将我的数组传递给变量self。

function Events() {
var self = [];

var xhr = Ti.Network.createHTTPClient();
xhr.open('GET', 'http://localhost/ngparser/events.php');

xhr.onload = function() {
    var events = JSON.parse(this.responseText),
        rows = [];

    Ti.API.info('JSON responseText: ');
    Ti.API.info(events);

    for (var i in events) {
        var id = events[i].id,
            title = events[i].title;            

        var amp = title.search('&');
        if (amp != -1) {
            title = title.replace('&', '&');
        }

        var row = Ti.UI.createTableViewRow({
            title: title,
            hasChild: true
        });
        rows.push(row);         
    }

    // I want this...
    return rows;        
};

xhr.send();
self = //... to end up here!
self = xhr.send(); //Does not work
return self;
}

module.exports = Events;

编辑:这里最终找到了一个解决方案http://developer.appcelerator.com/question/133913/how-do-i-pass-result-from-xhronload-function-to-variable#comment-119031

2 个答案:

答案 0 :(得分:2)

xhr.onload函数异步运行并且不会返回值,因此返回rows变量是没用的。

您可以使用回调函数中的表视图的setData方法将行数组添加到tableview中。

function Events() {
var self = [];

var xhr = Ti.Network.createHTTPClient();
xhr.open('GET', 'http://localhost/ngparser/events.php');

xhr.onload = function() {
    var events = JSON.parse(this.responseText),
        rows = [];

    Ti.API.info('JSON responseText: ');
    Ti.API.info(events);

    for (var i in events) {
        var id = events[i].id,
            title = events[i].title;            

        var amp = title.search('&');
        if (amp != -1) {
            title = title.replace('&', '&');
        }

        var row = Ti.UI.createTableViewRow({
            title: title,
            hasChild: true
        });
        rows.push(row);         
    }
    tableView.setData(rows);

};

xhr.send();
}

答案 1 :(得分:0)

AJAX是异步的,onload函数在AJAX调用完成时运行。含义JavaScript继续使用您的函数,稍后运行onload。这意味着您无法从中返回值。

您需要将与rows(或self)变量相关的所有代码放在onload函数中。