Проблема с синтаксическим анализом jQuery JSON

#javascript #jquery #jsonp

#javascript #jquery #jsonp

Вопрос:

Нужен совет о том, что я делаю неправильно во время синтаксического анализа JSON клиента… Советы и комментарии приветствуются, мой код ничего не возвращает. Отладчик также не показывает ничего полезного.

 <html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){                   
        var htmlString = "test";
    $.getJSON("http://search.twitter.com/search.json?callback=functionNameamp;q=#csharp", functionName);

    function functionName(data) {

            $.each(data.items, function(i,item){
            htmlString  = item.content   "<br>";
            });
            $('#test').html(htmlString);
        }

    });
</script>

</head>
<body>
<div id="test"></div>
  

Комментарии:

1. Если вы console.log(data); сразу после сообщения об успешном завершении, что возвращается? Можете ли вы опубликовать это? Глядя на URL, похоже, что возвращается функция.

2. Можете ли вы опубликовать ответ от службы (используя Fiddler или аналогичный инструмент)?

3. Добавлена консоль и вот результат:

4. документ готов, объект { результаты=[15], max_id=71266848888467460, подробнее …} a не определен f(a= не определено, c = функция(), d = не определено)jquery.min.js (строка 16) Имя функции (data=Object { results=[15], max_id=71266848888467460, подробнее …})testjson.html (строка 13) f(e =Object { url= » search.twitter.c…3csharpamp;_=1305826953953 «, isLocal= true, подробнее …}, f=[Object { results=[15], max_id=71266848888467460, подробнее …}, «успех», Object { readyState=4, status= 200, statusText=»успех»}])jquery.min.js (строка 16) g(a=200, c=»успех», l = не определено, m = не определено)jquery.min.js (строка 18) g(a =загрузка, c = не определено)

Ответ №1:

Не указывайте имя вашей функции обратного вызова. jQuery сделает это за вас. Функция, которая обрабатывает запрос JSONP, специально сконструирована, чтобы позволить вам использовать вашу функцию в обычном режиме и предоставлять другие полезные функции.

Сделайте callback=? вместо:

 $.getJSON("http://search.twitter.com/search.json?callback=?amp;q=#csharp", functionName);
  

Другая проблема связана с этим:

 $.each(data.items, function(i,item){
  

Вы повторяете data.items . Этого не существует в ответе. Затем вы запрашиваете item.content . Этого тоже не существует. Я не знаю, для какого JSON вы разрабатываете свой код, потому что это не тот JSON, который отправляет Twitter.

Комментарии:

1. Спасибо, исправил это. На самом деле я добавил метод при тестировании, но пытался не добавлять его и только сейчас с помощью =? и до сих пор никаких результатов.

2. @Tom Смотри правку. Вам нужно определить, что вы хотите от возвращаемых данных, и следовать их структуре. Ваш код не имеет никакого отношения к JSON.

3. Спасибо за всю вашу помощь, я копался не в том объекте, который был null.

Ответ №2:

Вместо этого вы можете использовать $.ajax() метод, чтобы получить более детальную обратную связь о статусе вашего запроса.

Комментарии:

1. Я использовал этот insted из getJSON, и это дает мне меньше информации.

2. Теперь я разбираюсь в некоторой клиентской ерунде. не элемент, а результаты: объект данных { результаты=[15], max_id=71271710921465860, подробнее …} $.each(data.results, функция (i,results){ HtmlString = results.text «<br>»; }); Немного странно для меня. Спасибо за вашу помощь в том, чтобы направить меня по правильному маршруту.

Ответ №3:

Попробуйте удалить обратный вызов в URL:

http://search.twitter.com/search.json?q=#csharp

Комментарии:

1. Это приведет к сбою AJAX-запроса из-за политики того же источника. Операционная система должна передать сигнал jQuery, чтобы обработать это как запрос JSONP.

2. Да, забыл об этом. Спасибо.