Постоянство в jquery .getJSON () - PullRequest
0 голосов
/ 03 июня 2011

Я использую .getJSON для отправки поискового запроса на мой PHP-сервер и возвращаю массив, который был json_encode'd. Я хотел бы использовать полученный объект после завершения функции jQuery (в идеале, поместить его в массив и использовать как любой другой объект в другом месте страницы.

Но объект перестает существовать после завершения функции. Это успех:

  var widgets = new Array();

  $.getJSON('/server.php', {query: search.value}, function(response) {
    widgets.push(response);
    alert('value of result's attribute1 is ' + widgets[widgets.length].attribute1);
  });

Однако, как только я покидаю функцию, widgets.push [length] становится нулевым, и я не могу получить доступ к объекту push -ed. Я думаю, что это будет копия, а не ссылка?

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

Ответы [ 3 ]

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

Я думаю, что вы проверяете неправильный индекс массива.

widgets[widgets.length - 1]

Это могут быть и другие вещи ... но это может быть и так.

0 голосов
/ 20 июля 2013

Создание «маленького» виджета, необходимого для загрузки результатов jsonP (содержимого виджета) в контейнер виджетов ....

Это работает для меня .... ах-один, ах-два,ах-три и четыре ....

  1. глобальная переменная "массива"

    var widgetContents = []; 
    
  2. запрос json ....

    $.getJSON(jsonp_url, function(results) { 
        $.each(results,  function(i, value) {                      
        widgetContents[i] = value;                          
    
        // console.log( i + " => " + value);
        });
            var success = true;                                     
    });
    
  3. проблемы отладки или перехвата ...

    if ( widgetContents.length == 0 || success != true ) { 
        alert("Opps... something went wrong in the backroom....");
    }
    
  4. результаты процесса ....

    else {
           $.each(widgetContents, function(index, value) {                         
                $('#' + contentsID).append(value);
    
                /* or whatever you need to do....   */                      
           });
    }
    
0 голосов
/ 03 июня 2011

Вызов getJSON происходит асинхронно или независимо от остальной части вашего JavaScript. Ваша проблема, скорее всего, связана с тем, что ваш вызов getJSON не завершен до того, как вы попытаетесь манипулировать массивом виджетов.

Вы должны убедиться, что любые манипуляции с виджетами происходят после завершения getJSON.

Часть синтаксиса getJSON позволяет добавить функцию обратного вызова при успешном вызове. См. http://api.jquery.com/jQuery.getJSON/. Поместите ВСЕ свой код манипуляции виджетов в "success".

...