Как мне обработать JSON-запрос, который не выполняется, когда я использую .ajax и JSONP? - PullRequest
1 голос
/ 14 июля 2011

Я пишу небольшое приложение для просмотра изображений Reddit, и оно работает нормально, если пользователь вводит действительный субредит. Но я пытаюсь разобраться со случаем несуществующего reddit и не могу понять это.

function load_data(after) {
    $.ajaxSetup({
        "error": function () {
            // this gets called every time, even for a valid sub-reddit
            location.href = 'index.html';
        }
    });

    fetchUrl = 'http://reddit.com/r/' + subreddit + '.json?jsonp=process_images&after=' + after;

    $.ajax({
        type: "GET",
        url: fetchUrl,
        dataType: "jsonp",
        cycleTime: 1,
        success: process_images
        // error: handle_error <- this doesn't work, because we're using jsonp
        // but if I take out jsonp, my whole app doesn't work any longer, since
        // I'm trying to run it as a local .html file, and cross-site scripting
        // security prevents it
    });
}

load_data(after);

Это ответ от сервера. Но я не могу справиться с этим в методе .ajax:

GET http://www.reddit.com/r/%3Blk%3Blkl%3B.json?jsonp=process_images&after=&callback=jQuery1510605472848052159_1310668370375&_=1310668370433 404 (Not Found)

Есть идеи?

Я попробовал некоторые из предложенных здесь советов, например, jQuery.getJSON не вызывает обратный вызов - но он показывает в основном одни и те же ошибки каждый раз, с некоторыми случайными числами для 'jQuery # #### не был назван '.

Ответы [ 4 ]

4 голосов
/ 14 июля 2011

Посмотрите на этот ответ на другой вопрос.

По сути, это ограничение в реализации jsonp в JQuery.Популярный ответ - использовать этот js плагин.

2 голосов
/ 18 декабря 2011

Ну, на самом деле это ограничение для внедрения междоменных скриптов, которое jQuery использует для JSONP.

И плагин jquery-jsonp , и более новые версии jQuery обходят это путем реализации тайм-аута. Они все еще не могут перехватить ошибки.

Лучшим решением является использование CORS (Cross-Origin Resource Sharing) , если возможно.

Более новые версии jQuery поддерживают CORS, но браузер и удаленный сайт также должны поддерживать его.

Текущие версии всех основных настольных браузеров поддерживают CORS, Internet Explorer только с версии 10.

1 голос
/ 14 июля 2011

Вы можете добавить несколько заголовков в ответ сервера, чтобы разрешить кросс-домен, если хотите ...

0 голосов
/ 14 июля 2011
$.ajax({
  statusCode: {
    404: function() {
      //handle the 404 here
      alert('page not found');
    }
  }
});

вот ссылка: http://api.jquery.com/jQuery.ajax/

EDIT

не будет работать с jsonp, см. Ответ выше ccurrens

...