Использование jQuery для получения данных json возвращает неверную ошибку метки - PullRequest
9 голосов
/ 05 августа 2009

У меня есть этот код, и я попробовал нечто подобное, используя функцию $ .getJson:

jQuery(document).ready(function(){
    var kiva_url = "http://api.kivaws.org/v1/loans/newest.json";

    jQuery.ajax({
        type: "GET",
        url: kiva_url,
            data:"format=json", 
        success: function(data){
            alert("here");
            jQuery.each(data.loans, function(i, loan){
                jQuery("#inner_div").append(loan.name + "<br />");
            });
        },
        dataType: "jsonp",
        error: function(){
            alert("error");
        }
    });

});

Когда я смотрю в Firebug, он возвращает ошибку «недопустимая метка». Я искал немного, некоторые люди обращаются к использованию парсера для разбора результатов. Я вижу результаты, возвращающиеся в Firebug. Может кто-нибудь указать на пример того, что я должен делать?

Ошибка Firebug:

неверный ярлык http://api.kivaws.org/v1/loans/newest.json?callback=jsonp1249440194660&_=1249440194924&format=json& Линия 1

Пример вывода того, как выглядит json, можно найти здесь: http://build.kiva.org/docs/data/loans

Ответы [ 5 ]

5 голосов
/ 06 августа 2009

Ну, я нашел ответ ... похоже, что kiva не поддерживает jsonp, что делает jquery здесь -

http://groups.google.com/group/build-kiva/browse_thread/thread/9e9f9d5df821ff8c

... у нас нет планов поддерживать JSONP. Поддерживая это выступает за бедных практики безопасности и есть уже несколько хороших способов получить доступ к данные из JavaScript, которые защищают ваш приложение и ваши пользователи. Вот отличная статья на эту тему:

http://yuiblog.com/blog/2007/04/10/json-and-browser-security/

Пока риск для кредиторов Kiva невелик сейчас, так как мы имеем дело только с общедоступные данные, позволяющие частному кредитору данные для импорта через теги скрипта риск дальше по дороге. наш мысль - это риск (и сложность добавлено создание защищенных приложений) не стоит пользы для Разработчики.

Написание серверного прокси для Корма, которые вам нужны, являются наиболее распространенными решение для доступа к данным в браузерные приложения. Немного другие трюки существуют с использованием iFrames. лучшая надежда - новая порода клиентов основанные технологии / стандарты, которые будут разрешить браузерный доступ к JavaScript междоменные ресурсы надежно ( http://dev.w3.org/2006/waf/access-control/ http://json.org/JSONRequest.html). Некоторые инструменты, такие как BrowserPlus и Gears давай поиграем с этим сегодня, а ты не сможет зависеть от них в какое-то время дикий.

В качестве последнего замечания я укажу, что любой, кто использует ответы JSON в JavaScript должен либо анализировать JSON явно или проверить JSON перед принимая eval () к нему. Смотрите здесь:

http://www.JSON.org/js.html

Ссылка со страницы отличная эталонная реализация предлагаемый синтаксический анализатор ECMAScript JSON интерфейс, JSON.parse ().

ура, жаворонок

2 голосов
/ 25 июня 2010

Когда вы возвращаете данные, вы возвращаете их с правильным типом контента и в качестве метода?

Вы должны вернуть свои данные следующим образом (пример php 5):

$return = "my_callback_method(" . json_encode( array('data'=>'your data etc') ). ")";

while (@ob_end_clean());
header('Cache-Control: no-cache');
header('Content-type: application/json');
print_r($return);

В вашем вызывающем коде JavaScript у вас должен быть метод, соответствующий возвращенному вами методу обратного вызова, в данном случае:

function my_callback_method( returned_data ){
}

Итак, ваш полный вызов js должен выглядеть примерно так:

jQuery(document).ready(function(){
var kiva_url = "http://api.kivaws.org/v1/loans/newest.json";

jQuery.ajax({
    type: "GET",
    url: kiva_url,
        data:"format=json", 
    dataType: "jsonp",
    error: function(xmlhttp,error_msg){
            alert("error"+error_msg);
    }
});

function my_callback_method( data ){
   alert("here");
   if( data && typeof(data) == 'object') ){
     jQuery.each(data.loans, function(i, loan){
         jQuery("#inner_div").append(loan.name + "<br />");
     });
   }
}

});
2 голосов
/ 05 августа 2009

возможно это может помочь с jsonp:

http://remysharp.com/2007/10/08/what-is-jsonp/

0 голосов
/ 07 сентября 2011

Это ответ http://forum.jquery.com/topic/jquery-getjson-invalid-label

Просто оберните ответ Json запросом обратного вызова Например. jQuery16203473509402899789_1315368234762({"Code":200,"Message":"Place added successfully","Content":""}); где jQuery16203473509402899789_1315368234762 ваш запрос обратного вызова (вы можете получить его через строку запроса) {"Code":200,"Message":"Place added successfully"} ваш ответ JSON

0 голосов
/ 05 августа 2009

Где происходит ошибка? Возникает ли ошибка при попытке перебрать данные ajax и добавить их к inner_div? Если да, пожалуйста, покажите нам, как выглядит data.loans.

Также в вашем коде есть опечатка:

            jQuery.each(data.loans, function(i, loan){
                    jQuery("#inner_div").append(loan.name + "<br />"); //It should be loan.name and not laon.name
            });
    },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...