$.ajax() против $.getJSON() с YQL и междоменными запросами

Я пытаюсь выполнить междоменный запрос данных из блога WordPress, используя YQL. Это код из моей первой попытки:

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. В чем разница между двумя вызовами? И что еще более важно, почему сработал только второй?


person dopatraman    schedule 05.09.2012    source источник


Ответы (2)


Разница в том, что вы не указываете свой тип данных или тип контента.

Добавлять

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

на ваш вызов ajax

person G-Man    schedule 05.09.2012
comment
Поскольку это междоменный, тип данных должен быть jsonp, как указано Фахадом ниже. Кроме того, я бы потратил время на то, чтобы полностью написать даже упрощенную функцию успеха на тот случай, если какой-нибудь новичок позже наткнется на этот пост. В противном случае хороший ответ и +1. - person cssyphus; 28.03.2014

$.getJSON() использует тип данных json, а $.ajax() — нет. Если вы хотите использовать стандартную $.ajax(), вам придется явно указать тип данных. Для вызовов между доменами используйте тип данных jsonp вместо json. Но я думаю, что YQL работает и с json.

person fahad.hasan    schedule 05.09.2012
comment
+1 за внимание к jsonp, но в будущем я найду время, чтобы создать краткий пример кода. - person cssyphus; 28.03.2014