Почему запрос 200 OK jQuery GET возвращает пустую строку при чтении понравившихся сообщений Tumblr с использованием базовой аутентификации?

... когда я могу получить доступ к данным, используя прямой URL-адрес » http://www.tumblr.com/api/[email protected]&password=mypassword&debug=1, который дает мне сообщения, которые я ищу:

Array
(
    [posts] => Array
        (
            [0] => Array
                (
                    [id] => 1482002179
                    [url] => http://staff.tumblr.com/post/1482002179
                    [url-with-slug] => http://staff.tumblr.com/post/1482002179/the-new-dashboard-for-iphone
                    [type] => photo
                    [date-gmt] => 2010-11-04 21:19:33 GMT
                    [date] => Thu, 04 Nov 2010 17:19:33
                    [bookmarklet] => 0
                    [mobile] => 0
                    [feed-item] => 
                    [from-feed-id] => 0
                    [unix-timestamp] => 1288905573
                    [format] => html
                    [reblog-key] => 8LVzAqTT
                    [slug] => the-new-dashboard-for-iphone
                    [liked] => 1
                    [note-count] => 2378
                    [tumblelog] => Array
                        (
                            [title] => Tumblr Staff
                            [name] => staff
                            [cname] => 
                            [url] => http://staff.tumblr.com/
                            [timezone] => US/Eastern
                            [avatar_url_16] => http://28.media.tumblr.com/avatar_013241641371_16.png
                            [avatar_url_24] => http://26.media.tumblr.com/avatar_013241641371_24.png

... и так далее.

Но не повезло, когда я пытаюсь добиться того же, используя код jQuery, где я использую этот запрос GET с чтение с проверкой подлинности, как указано в документации Tumblr REST API:

   $.GET(
     "http://www.tumblr.com/api/likes", 
     { email: "[email protected]", password: "mypassword" }
   );

Я отслеживаю ответы с помощью Firebug. Статус: 200 ОК. Ответ: пусто. XML: элемент не найден.

Отслеживание ответа с помощью:

   $.GET(
     "http://www.tumblr.com/api/likes", 
     { email: "[email protected]", password: "mypassword" },
     function( data ){ 
        alert( data ); 
     }
   );

отображает пустое предупреждающее сообщение.

Я получаю один и тот же результат независимо от того, где я запускаю код, будь то файл:///, локальный хост (XAMPP), мой собственный сервер или прямо из моей темы на mysite.tumblr.com.

Я что-то пропустил? Я мог бы добиться этого с помощью JavaScript + PHP, cURL и т. д., но я ищу решения только для JavaScript.


person vjk2005    schedule 13.11.2010    source источник


Ответы (2)


Мне кажется, что вы столкнулись с политикой того же происхождения. Вы не можете использовать Ajax для загрузки данных откуда угодно, вы можете загружать данные только из того же источника, что и исходный документ (не скрипт, а HTML-документ).

Предположим, что проблема в этом:

Если и браузер, и удаленный сайт поддерживают CORS и ваше происхождение приемлемо для удаленного сайта , вы можете использовать это. Но учтите, что сейчас его поддерживают только некоторые браузеры (а IE поддерживает его, только если вы создадите файл особое усилие, в то время как другие браузеры поддерживают его как часть своей XmlHTTPRequest поддержки объектов, что и get в jQuery скрыто используется).

Вы, вероятно, можете использовать JSONP, если его поддерживает tumblr, который jQuery поддерживает в своем Вызов .get (не .GET, как в ваших примерах кода).

Другой вариант — использовать Yahoo! Язык запросов как междоменный прокси.

person T.J. Crowder    schedule 13.11.2010
comment
В Tumblr есть поддержка JSON, но, как ни странно (я предполагаю, что это было недавнее дополнение, и они все еще работают над ним), их понравившиеся посты / API панели инструментов этого не делают. Он есть в списках пожеланий пользователей[ codelahoma.com/ post/697228236/ ] хотя. Я думаю, что использование прокси-сервера - единственный оставшийся нам вариант. - person vjk2005; 13.11.2010
comment
Чтобы сэкономить время, я перестал возиться и пошел по прокси-маршруту. Не очень элегантно, но работает. - person vjk2005; 13.11.2010
comment
@ vjk2005 vjk2005 у них есть поддержка JSON на панели инструментов, но это недокументировано. По умолчанию они дают вам XML, но если вместо этого вы нажмете api/dashboard/json, он сработает... - person JKirchartz; 21.01.2011

Вы уверены, что получаете 200? возможно, попробуйте это, чтобы убедиться, что ответ должен = "успех", если все прошло нормально - насколько мне известно, функция обратного вызова вызывается независимо от результата.

$.GET(
 "http://www.tumblr.com/api/likes", 
 { email: "[email protected]", password: "mypassword" },
 function( data, response ){ 
    alert( response ); 
 }

);

Может быть, это что-то простое, например / в конце URL-адреса.

Я обычно делаю посты ajax, подобные этому

$.post(
 "http://www.tumblr.com/api/likes", 
 { email: "[email protected]", password: "mypassword" },
 function( data, response ){
    if(response == "success")
    {
        //inject data into page
    }
    else
    {
        alert("Ooops something went wrong... please try again.");
    }

 }

);

И в документации для $.get указано, что:

Если запрос с помощью jQuery.get() возвращает код ошибки, он завершится без ошибок, если только скрипт не вызвал глобальный метод .ajaxError().

person Rob    schedule 13.11.2010
comment
Я попытался добавить косую черту в конце URL-адреса, но он вернул 403. Даже $.post возвращает 403. Я не пробовал проверять ответ об успешном завершении, и это мой следующий шаг перед переходом на прокси-маршрут. - person vjk2005; 13.11.2010