1

クロスドメインリクエストを実行し、$。ajax関数を使用してURLからコンテンツをフェッチする必要があります。ただし、以下のコードは最初のアラート、つまりalert(myUrl)のみを表示し、その後実行は停止します.2番目のアラートは表示されません。自分が書いたコードの何が問題なのかわかりません。誰かが私がここで間違っていることを教えてもらえますか?

function getContentFromUrl(){
    var myUrl="http://icant.co.uk";
    alert(myUrl);
    $.ajax({
        url: "http://query.yahooapis.com/v1/public/yql?" +
             "q=select%20*%20from%20html%20where%20url%3D%22" +
             encodeURIComponent(myUrl) + "%22&format=xml'&callback=?",
        dataType: 'json',
        data: data,
        success: function () {
            alert("***********"+data.results[0]);
            if (data.results[0]) {
                var htmlText = data.results[0];
            var jsonObject = parseAndConvertToJsonObj(htmlText);
            } else {
                document.getElementById("displayerrors").innerHTML = "Could not load the page.";
            }
        },
        error: function() {
            document.getElementById("displayerrors").innerHTML = "Could not load the page.";
        }
    });
}  
4

4 に答える 4

6

同一生成元ポリシー

このポリシーは、同じサイトから発信されたページで実行されているスクリプトが、特定の制限なしに互いのメソッドとプロパティにアクセスすることを許可しますが、異なるサイトのページ間でほとんどのメソッドとプロパティにアクセスすることを防ぎます。

于 2012-07-23T02:34:30.487 に答える
1

同一生成元ポリシーのため、クロスドメインリクエストに通常のJSONを使用することはできません。代わりに、JSONPを使用する必要があります。jQueryでは、次のように実行できます。

$.ajax({
    dataType: 'jsonp',
    crossDomain: true
    // other info
});

JSONPにはセキュリティ上の問題があることに注意してください。ホストドメインを信頼する場合にのみJSONPを使用してください。

于 2012-07-23T02:36:18.287 に答える
1

これはjQueryだと思いますか?

次のことを試してください。

url = "http://query.yahooapis.com/v1/public/yql?" +"q=select%20*%20from%20html%20where%20url%3D%22" + encodeURIComponent(myUrl) + "%22&format=xml'&callback=?";
getContentFromURL(url);

function getContentFromURL(url)
{
    $.get(url, function (data) {
        console.log(data);
    });
}

コンソールに応答をダンプする場合は、そこからビルドできます。

于 2012-07-23T02:37:20.627 に答える
0

ここdataは定義されていません

$.ajax({
            url: "http://query.yahooapis.com/v1/public/yql?" + "q=select%20*%20from%20html%20where%20url%3D%22" + encodeURIComponent(myUrl) + "%22&format=xml'&callback=?",
            dataType: 'json',
            data: data,

コールバック関数のパラメータを追加するのを忘れた

success: function (data) {
    ....
}

最後に、コードは次のようになります

function getContentFromUrl() {
        var myUrl = "http://icant.co.uk";
        alert(myUrl);
        $.ajax({
            url: "http://query.yahooapis.com/v1/public/yql?" + "q=select%20*%20from%20html%20where%20url%3D%22" + encodeURIComponent(myUrl) + "%22&format=xml'&callback=?",
            dataType: 'json',
            data: {},
            success: function (data) {
                alert("***********" + data.results[0]);
                if (data.results[0]) {
                    var htmlText = data.results[0];
                    var jsonObject = parseAndConvertToJsonObj(htmlText);
                } else {
                    document.getElementById("displayerrors").innerHTML = "Could not load the page.";
                }
            },
            error: function () { document.getElementById("displayerrors").innerHTML = "Could not load the page."; }
        });
    }  
于 2012-07-23T02:36:51.937 に答える