0

これが私のコードです:

function getTitle(url) {
    var urlToGet = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22" + encodeURIComponent(url) + "%22%20and%20xpath%3D'%2F%2Ftitle'&format=json";
    $.ajax({
        type: "GET",
        url: urlToGet,
        contentType: "application/json; charset=utf-8",
        dataType: "jsonp",
        success: function(data) {
            var result = JSON.stringify(data);
            if(JSON.parse(result).query.results !== null) {
                return JSON.parse(result).query.results.title;
            }
        }
    });
}

YQLを使用して、指定された URL のタイトルを取得します。ただし、非同期プロセスであるため、 をgetTitle("http://www.google.com")返します。undefinedそれで、私はこれを解決する方法をインターネットで探しましたが、本当に、多くの議論を見ましたが、実際の解決策はありませんでした. 誰かがこれを解決する方法を明確に説明できますか? (注:サーバー側では何もできません)

ありがとう!

4

2 に答える 2

0

あなたはこのようにそれをするかもしれません:

function getTitle(url) {
    var title = "";
    var urlToGet = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22" + encodeURIComponent(url) + "%22%20and%20xpath%3D'%2F%2Ftitle'&format=json";
    $.ajax({
        type: "GET",
        url: urlToGet,
        async:false,
        contentType: "application/json; charset=utf-8",
        dataType: "jsonp",
        success: function(data) {
            var result = JSON.stringify(data);
            if(JSON.parse(result).query.results !== null) {
                title = JSON.parse(result).query.results.title;
            }
        }
    });
  return title;
}

async:false成功コールバックで設定されるオプションとタイトル変数に追加しました。このように、getTitleは通常の関数のようにタイトルを返しますが、リクエストが終了するまで、他のスクリプトの実行を停止します(また、何かが不足していない場合は、インターフェイスがフリーズする可能性があります)。

他の唯一のオプションは、成功コールバックでそのタイトルを使用して必要なことを実行することです(ここでの別の回答のようなコールバック関数を使用するか、必要なコードを成功コールバック関数に直接配置します)。うーん。しかし、jqueryのドキュメントによると:

クロスドメインリクエストとdataType:「jsonp」リクエストは同期操作をサポートしていません。

したがって、オプションは1つだけです)

于 2012-09-03T05:32:24.467 に答える
0

おそらく最良の方法は、getTitleメソッドにコールバックを渡すことです...

function getTitle(url, callback) {
    var urlToGet = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22" + encodeURIComponent(url) + "%22%20and%20xpath%3D'%2F%2Ftitle'&format=json";
    $.ajax({
       type: "GET",
       url: urlToGet,
       async:false,
       contentType: "application/json; charset=utf-8",
       dataType: "jsonp",
        success: function(data) {
            var result = JSON.stringify(data);
            callback(JSON.parse(result).query.results.title);
        }
    });
}

そしてそれをこのように呼んでください:

getTitle("http://www.google.com", function(title) {
    alert(title);
});
于 2012-09-03T05:24:22.323 に答える