$ .getJSON не работает - PullRequest
       14

$ .getJSON не работает

7 голосов
/ 14 мая 2011

Я ищу соответствующую тему в jQuery.Но я не нашел никакого способа решить мою проблему.

$(document).ready(function(){
    $("#inputForm").submit(function(event){
        $(":text").each(function() {
            var inputText = $(this).val();
            var userList = [];
            var weblink = 'http://test.com';

            // problem is from here.
            $.getJSON(weblink, function(data){
                alert(weblink); // this statement doesn't show up
                $.each(data, function(entryIndex, entry){
                    userList.push(entry['from_user']);
                });
            });
            alert(userList);
        });
     });
});

Здесь есть четыре проблемы:

  1. Почему не показывается первое предупреждение («ссылка»)up.
  2. Почему этот код не может получить данные json с веб-сайта
  3. Цель этого кода - получить тег from_user из файла json и сохранить его в массиве userList.
  4. Переменные в выражении "$ .each (data, function (entryIndex, entry) {", функция имеет два входных параметра, один - entryIndex, а другой - entry, мне так интересно, что эти два параметра предназначены для чего? и как я могу использовать эти два параметра.

Может кто-нибудь помочь мне решить эту проблему. Я был на складе здесь в течение одного дня. Большое спасибо.

Ответы [ 5 ]

15 голосов
/ 14 мая 2011

Пара вопросов есть:

  1. getJSON делает запрос ajax. Запросы Ajax подчиняются Одинаковой политике происхождения . Если ваша страница не загружена из http://test.com (или нескольких других предупреждений), она не будет работать. Возможно, вы ищете JSON-P (который также поддерживает jQuery), при условии, что сервер поддерживает его.

  2. getJSON, как и все ajax-запросы, по умолчанию асинхронный , поэтому ваше второе предупреждение (со списком пользователей) будет отправлено до запроса. Хотя вы можете делать синхронные запросы ajax, это очень плохая идея (во время запроса блокируется пользовательский интерфейс большинства браузеров). Вместо этого просто используйте список пользователей после получения его в обратном вызове, а не пытайтесь использовать его в функции, вызывающей getJSON.

Редактировать : Вы сказали ниже, что пытаетесь использовать API поиска в Твиттере. Этот API поддерживает JSON-P, поэтому, если вы используете JSON-P для выполнения запроса, он должен работать. e.g.:

$(document).ready(function(){
    $("#inputForm").submit(function(event){
        $(":text").each(function() {
            var inputText = $(this).val();
            var userList = [];
            var weblink = 'http://search.twitter.com/search.json?q=&ands=google';

            // problem is from here.
            $.ajax({
                url:        weblink,
                dataType:   "jsonp", // <== JSON-P request
                success:    function(data){
                    alert(weblink); // this statement doesn't show up
                    $.each(data.result, function(entryIndex, entry){ // <=== Note, `data.results`, not just `data`
                        userList.push(entry['from_user']); // <=== Or `entry.from_user` would also work (although `entry['from_user']` is just fine)
                    });
                    alert(userList); // <== Note I've moved this (see #2 above)
                }
            });
        });
     });
});

... но, конечно, вы не хотите делать это для каждого текстового поля в форме?

Вот живой пример , но без формы (и выполняющий только один запрос, а не запрос для каждого поля).

4 голосов
/ 14 мая 2011

Просто добавьте к ссылке

&callback=?

или

?callback=?

(если это первая и единственная переменная GET) Это сделает ваш вызов вызовом JSONP, у которого нет проблем с Same Origin Policy.

1 голос
/ 29 июня 2011

Вы используете платформу MVC? По-видимому, по умолчанию MVC 2.0 блокирует GET-запросы к действиям, которые возвращают JsonResult. Проверить:

http://mhinze.com/2010/04/13/json-hijacking-in-asp-net-mvc-2/

У меня возникла та же проблема при обновлении существующего приложения (написанного в MVC v1), в котором использовались вызовы .getJSON для извлечения данных из контроллера MVC в View (через jquery / javascript) и я не мог понять, почему они не работали. Я пытался разные версии jquery не повезло, тогда я нашел ссылку выше. Вместо этого я переключился на POST (а также немного изменил способ отправки данных из словаря, используемого контроллером) и получил его в работу - наконец-то !!

Удачи! Jayd

1 голос
/ 14 мая 2011

Не уверен, но не требует ли он аргументов? Попробуйте это:

$.getJSON(weblink, {}, function(data){
0 голосов
/ 24 марта 2016

Я хотел бы добавить еще одну причину, по которой jQuery.getJSON () может не отвечать, как ожидалось, в среде разработки под IIS для Windows.

После всех приведенных здесь процедур я не смогданные из файла * .json, только если я изменил расширение на * .js, состояние ответа вернулось

{"status"="404", "statusText"="Not Found"}

Затем я вспомнил, что в IIS есть некоторые MIME / типы, которые не указаны.Добавление MIME / Тип приложения / json для файлов с расширением .json решило мою проблему.

Информация о том, как добавить MIME / типы в iis7.

...