Присвоение возвращаемого значения вызова ajax переменной с помощью jquery - PullRequest
2 голосов
/ 11 ноября 2011

Как я могу назначить переменную (var) для объекта json, который возвращается из вызова ajax на сервер?Мне нужно получить доступ к этому объекту в остальной части тела.

Например, я пробовал это, я не знаю, это правильно.

var selectValues=$(document).ready(function() {
    $.ajax({
                  type: "POST",
                  url: "http://10.0.2.2/mobileajax/callajax.php",
                  data: ({name: theName}),
                  cache: false,
                  dataType: "text",
                  success: onSuccess
                });
})


var $vendor = $('select.mobile-vendor');
var $model = $('select.model');
$vendor.change(
              function() {
                  $model.empty().append(function() {
                      var output = '';
                      $.each(selectValues[$vendor.val()], function(key, value) {
                          output += '<option>' + key + '</option>';
                      });
                      return output;
                  });
              }).change();

// bonus: how to access the download link
$model.change(function() {
    $('a#download-link').attr('href', selectValues[$vendor.val()][$model.val()]).show();
});

Обратите внимание, что переменная selectValues используется в остальной части тела.

Ответы [ 5 ]

1 голос
/ 11 ноября 2011

Я думаю, что вы должны сделать весь код внутри функции $(document).ready(function(), а затем сделать синхронный вызов ajax.Потому что теперь вызов ajax будет сделан, когда документ будет готов, но другой код будет выполняться напрямую, не дожидаясь готовности документа.Также вызов ajax является асинхронным по умолчанию, поэтому вы должны сделать его синхронным и назначить переменную selectValues внутри функции успеха вызова ajax.Это станет примерно так:

$(document).ready(function() {
        var selectValues;
        $.ajax({
              type: "POST",
              url: "http://10.0.2.2/mobileajax/callajax.php",
              data: ({name: theName}),
              cache: false,
              dataType: "text",
              async: false,
              success: function(data) {
                selectValues = data
              }
            });

            var $vendor = $('select.mobile-vendor');
            var $model = $('select.model');
            $vendor.change(
                          function() {
                              $model.empty().append(function() {
                                  var output = '';
                                  $.each(selectValues[$vendor.val()], function(key, value) {
                                      output += '<option>' + key + '</option>';
                                  });
                                  return output;
                              });
                          }).change();

            // bonus: how to access the download link
            $model.change(function() {
                $('a#download-link').attr('href', selectValues[$vendor.val()][$model.val()]).show();
            });
})
0 голосов
/ 11 ноября 2011

Другой способ сделать это - добавить оставшуюся часть кода в обратный вызов успеха, например:

$(document).ready(function() {
        $.ajax({
              type: "POST",
              url: "http://10.0.2.2/mobileajax/callajax.php",
              data: ({name: theName}),
              cache: false,
              dataType: "text",
              async: false,
              success: function(selectValues) {
                var $vendor = $('select.mobile-vendor');
                var $model = $('select.model');
                $vendor.change(
                              function() {
                                  $model.empty().append(function() {
                                      var output = '';
                                      $.each(selectValues[$vendor.val()], function(key, value) {
                                          output += '<option>' + key + '</option>';
                                      });
                                      return output;
                                  });
                              }).change();

                // bonus: how to access the download link
                $model.change(function() {
                    $('a#download-link').attr('href', selectValues[$vendor.val()][$model.val()]).show();
                });
              }
            });

})
0 голосов
/ 11 ноября 2011

Вот как мы извлекаем возвращенную информацию из наших (xml) ajax-вызовов:

$.ajax ({
    type: "POST",
    url: "something.cgi?someparam=whatever",
    data: "key=val&key2=val2",
    dataType: "xml", // you use json, but I don't think it matters
    success: function (data) {
    if ($("error", data).text() === "") {
        // I could assign $("error", data).text() to a var just here
        // This gets the "error" parameter out of the returned xml or
        // json, here contained in "data"
    }
    [snip the rest]
0 голосов
/ 11 ноября 2011
$.ajax({
              type: "POST",
              url: "http://10.0.2.2/mobileajax/callajax.php",
              data: ({name: theName}),
              cache: false,
              dataType: "text",
              success: function (result){
                  var selectValues=result;
              }
            });

попробуйте это.

0 голосов
/ 11 ноября 2011

вы должны определить переменную вне области действия document ready следующим образом:

var selectValues;
$(document).ready(function() {
    // ajax
});

в функции onSuccess вы можете определить selectValues = data или что-то подобное

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...