带有YQL和跨域请求的$ .ajax()vs $ .getJSON()

时间:2012-09-05 05:38:29

标签: ajax getjson yql

我正在尝试使用YQL从wordpress博客执行跨域请求。这是我第一次尝试的代码:

var g = {data:""}

function getWP() {

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

     var successfunc = function(data) {
        if(data.results[0]){
            g.data = data.results[o];
        } else {
            var errormsg = '<p>Error: could not load the page.</p>';
            alert(errormsg);
        }
    }

    $.ajax({
      url: url,
      success: successfunc
    });

}

当我尝试这个ajax调用时,返回的data对象是一个空字符串。但是,当我这样做时:

$.getJSON(url, successfunc);

返回了正确的JSON对象。这两个电话有什么区别?更重要的是,为什么只有第二个工作?

2 个答案:

答案 0 :(得分:2)

不同之处在于您没有指定数据类型或内容类型

添加

$.ajax({
  url: url,
  dataType: "json",
  contentType: "application/json; charset=utf-8",
  success: successfunc
});

到你的ajax电话

答案 1 :(得分:2)

$。getJSON()使用数据类型 json ,而 $ .ajax()则不会。如果您想使用标准 $ .ajax(),则必须明确指定数据类型。对于跨domail调用,请使用数据类型 jsonp 而不是 json 。但我认为YQL也适用于json。