1

このjQuery/JSコードを修正しようとして何時間も検索しましたが、何も返したくないようです。

var result = getURLS(); // this is always blank

function getURLS() {
    var urls = [];
    var URL_record = Parse.Object.extend("URL_record");
    var query = new Parse.Query(URL_record);

    query.equalTo("user", Parse.User.current());
    query.ascending("date");

    query.find({
        success : function(results) {
            var tempURLS = [];
            $.each(results, function(index, record) {
                urls.push(record.get("shortURL") + " " + record.get("longURL"));
            });
        },
        error : function(error) {

        }
    });
    return urls;
}

ただし、この特定の関数からアラート関数を作成すると、次のようになります。

success : function(results) {
    var tempURLS = [];
    $.each(results, function(index, record) {
        urls.push(record.get("shortURL") + " " + record.get("longURL"));
    });
        alert(urls);
},

うまく警告しているようです。

何か案は?

4

2 に答える 2

2

query.findは非同期であるため、success関数内で変数を設定してから、resultを使用するコードを呼び出す必要があります。

var result;
getURLS();

function getURLS() {
    var urls = [];
    var URL_record = Parse.Object.extend("URL_record");
    var query = new Parse.Query(URL_record);

    query.equalTo("user", Parse.User.current());
    query.ascending("date");

    query.find({
        success : function(results) {
            var tempURLS = [];
            $.each(results, function(index, record) {
                urls.push(record.get("shortURL") + " " + record.get("longURL"));
            });
            result = urls;
            // call code that uses result here
            processResults(result);
        },
        error : function(error) {

        }
    });
}
于 2012-10-23T22:24:40.020 に答える
0

query.getは何時間も困惑した後、非同期であることがわかりました。$(function(){});から他のすべてを取り除くまで。ブロックして、ブロックの後にクエリが起動することをコンソールで確認しました。最終的なアイデアは、モデルとビューをFacebookアプリにロードすることです。このアプリには、非同期のinit機能もあります。Parseクエリも非同期になるとは思っていませんでした。

于 2012-11-05T18:49:25.823 に答える