элементарный вопрос о получении значения из вызова getJson - PullRequest
1 голос
/ 11 марта 2011

У меня есть приложение MVC 2.На стороне клиента есть функция, которая выполняет вызов контроллера, и возвращается значение, но я не могу поместить его в переменную JavaScript для последующего использования.

ВотJSON, возвращаемый контроллером (эта часть работает нормально, я проверил с помощью Fiddler):

{"CompanyID":781}

А вот моя функция JS / jQuery:

function getSelectedCompanyID() {
            $.ajaxSetup({ cache: false });
            var cid = "";
            $.getJSON("/Company/GetLatestCompanyID/", function (json) {
                cid = json.CompanyID;
            });
            return cid;
        }

Спасибо.

Редактировать : Просто чтобы прояснить, проблема, похоже, заключается в этой строке:

cid = json.CompanyID;

или в самом вызове JSON.Полученное значение не помещается в переменную JS.

1 Ответ

1 голос
/ 11 марта 2011

Вызов асинхронный . Функция обратного вызова, которую вы передаете "$ .getJSON ()", на самом деле не будет вызываться до тех пор, пока не завершится HTTP-запрос, что будет через долгое время после возврата внешней функции.

Способ кодирования для того, чтобы справиться с этим фактом, заключается в том, чтобы ввести в эту функцию обратного вызова всю необходимую логику для обработки результатов. То есть вместо написания кода, ожидающего, что внешняя функция вернет значение, поместите весь этот код в самого обратного вызова.

изменить & mdash; вот график активности, чтобы уточнить:

  1. Что-то происходит на вашей странице, вызывая (среди прочего) вызов getSelectedCompanyID ().
  2. Функция «getSelectedCompanyID» вызывает «$ .getJSON ()», передавая URL и анонимную функцию, которая, после завершения HTTP-запроса, установит локальную переменную во внешнем замыкании в некоторые из возвращенных данных.
  3. Код jQuery выполняет целый ряд работ по настройке XMLHttpRequest, запускает его и затем возвращает к «getSelectedCompanyID ()».
  4. Оценивается return в конце функции "getSelectedCompanyID ()", и эта функция завершается.
  5. Код с именем «getSelectedCompanyID ()» разочаровывается из-за значения NULL, возвращаемого функцией «getSelectedCompanyID ()».

    , а затем через некоторое время:

  6. HTTP-запрос завершается при получении ответа от вашего сервера.
  7. Код оболочки jQuery десериализует ответ JSON и вызывает анонимный обработчик, переданный обратно на шаге 2.
  8. Функция анонимного обработчика вставляет значение из возвращенного объекта JSON в переменную "cid" и затем завершается.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...