Установить для глобальной переменной javascript значение JSONresult? - PullRequest
1 голос
/ 26 июля 2011

как установить глобальную переменную js в набор результатов json в событии onload?

    var global = [];

    $.getJSON("<%: Url.Action("myUrl", "con") %>/", 
     function(data) {
           $.each(data, function(key, val) {
             global.push(val);
           });
    });

global не имеет значения, установленного при загрузке, мне нужно получить доступ к нему вне вызова json ...

Ответы [ 4 ]

2 голосов
/ 26 июля 2011

Вы снова. Может быть, попробуйте

var result;
$.ajax({
    url: '<%: Url.Action("myUrl", "con") %>/',
    dataType: 'json',
    async: false,
    success: function(data) {
        result = data;
    }
});
// process result here
0 голосов
/ 26 июля 2011

Как указывает @marc (косвенно), вы должны понимать природу вызова ajax и модель события. Ajax-вызов выполняется, как только анализируется JS-файл, и результат возвращается асинхронно . Итак, ваша временная шкала кода будет выглядеть как

00 set global = []
01 AJAX call /someurl/ -------------------\
02 check global /* it's empty */           \
03 do something else                  [process AJAX call on server, send result]
...                                         /
42 AJAX call is completed <----------------/
43 call  success ----------------------------------> global.push(result)
44 at this point of time you can access global

Это временная шкала, а не порядок исполнения. Время между вызовом AJAX и ответом может быть произвольным, включая случай тайм-аута или ошибки на стороне сервера

Итак, что вы должны делать?

1) нормальное решение для JS - обратный вызов, функция успеха, которую вы уже имеете, может либо

1.1) установить глобальный и вызвать другую функцию, или

1.2) выполнить нужные действия с данными

2) событие - лучше, если вы предполагаете использовать данные в нескольких частях кода, читайте механизм событий jQuery

3) синхронный вызов, как предлагает @marc - этого следует избегать в 99% случаев. Единственный известный мне случай, когда это может потребоваться, - это когда вам необходимо запросить обязательные данные из стороннего источника, и даже в этом случае вы можете сделать это на сервере (хотя по крайней мере приемлем синхронный AJAX)

0 голосов
/ 26 июля 2011

Этот код должен работать просто отлично. ( Live copy ) Звучит так, как будто есть проблема с вызовом ajax, который не возвращает данные в ожидаемой вами форме.

0 голосов
/ 26 июля 2011

Вам не нужно устанавливать глобальный массив.Просто присвойте значение.

var global = null;

    $.getJSON("<%: Url.Action("myUrl", "con") %>/", 
     function(data) {
           $.each(data, function(key, val) {
             global = val;
           });
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...