2009-08-05 3 views
9

У меня есть этот код, а также пытались что-то подобное с помощью функции $ .getJSON:Использование JQuery для получения JSON данных возвращает недопустимые LABEL

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 ошибка:

invalid label http://api.kivaws.org/v1/loans/newest.json?callback=jsonp1249440194660&_=1249440194924&format=json& Line 1

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

ответ

5

Ну я нашел ответ ... это выглядит как Кива не поддерживает JSONP, который что Jquery делает здесь -

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

...we don't have plans to support JSONP. Supporting this advocates poor security practices and there are already some good ways to access the data from JavaScript that protect your application and your users. Here's a great article on the subject:

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

While the risk to Kiva lenders is low now since we are only dealing with public data, allowing private lender data to be imported via script tags is a risk further down the road. Our thought is the risk (and complexity added to create secure applications) is not worth the benefit to developers.

Writing a server-side proxy for the feeds you need is the most common solution to accessing data in browser-based applications. Some other tricks exist using iFrames. The best hope is the new breed of client- based technologies/standards that will let browser-based JavaScript access cross-domain resources securely ( http://dev.w3.org/2006/waf/access-control/ http://json.org/JSONRequest.html ). Some tools like BrowserPlus and Gears let you play with these today, but you won't be able to depend on these in the wild for a while.

As a final note, I'll point out that anyone using JSON responses in JavaScript should either parse JSON explicitly or validate the JSON before taking eval() to it. See here:

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

Linked from the page is a great reference implementation of the proposed ECMAScript JSON parser interface, JSON.parse().

Cheers, skylar

+0

Спасибо, Брендан, вы просто спасли мне кучу времени! – ezeedub

0

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

Кроме того, есть опечатка в коде:

  jQuery.each(data.loans, function(i, loan){ 
        jQuery("#inner_div").append(loan.name + "<br />"); //It should be loan.name and not laon.name 
      }); 
    }, 
+0

Fixed моей опечатки - я считаю, что на retrieve- Если я беру то, что JQuery цикл я все еще получаю ошибку. – brendan

+0

какая строка дает ошибку? Можете ли вы включить моментальный снимок с ошибкой Firebug? – SolutionYogi

+0

добавлен вывод консоли firebug – brendan

2

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

Вы должны вернуть ваши данные следующим образом (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 />"); 
    }); 
    } 
} 

}); 
0

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

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

Смежные вопросы