1

我必须执行跨域请求并使用 $.ajax 函数从 url 获取内容。但是下面的代码只显示第一个警报,即警报(myUrl),之后执行停止。不显示第二个警报。我不知道我写的代码有什么问题。有人可以告诉我我在这里做错了什么吗?在此先感谢。

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 回答