使用jquery将ajax调用返回值分配给var

时间:2011-11-11 10:44:41

标签: javascript ajax jquery global-variables

如何将变量(var)分配给从ajax调用返回给服务器的json对象?我需要在身体的其他部分访问该对象。

例如,我试过这个,我不知道这是对的。

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 个答案:

答案 0 :(得分:1)

我认为你应该在$(document).ready(function()函数中执行整个代码,然后使ajax调用同步。因为现在在文档准备就绪时会进行ajax调用,但是其他代码将直接运行而无需等待文档准备就绪。此外,默认情况下,ajax调用是异步的,因此您应该使其同步并在ajax调用的success函数内分配selectValues变量。它会变成这样:

$(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();
            });
})

答案 1 :(得分:0)

你必须在document ready范围之外定义var,如下所示:

var selectValues;
$(document).ready(function() {
    // ajax
});
在onSuccess函数中,你可以定义selectValues = data或类似的东西

答案 2 :(得分:0)

$.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;
              }
            });

试试这个。

答案 3 :(得分:0)

以下是我们如何从(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]

答案 4 :(得分:0)

另一种方法是在成功回调函数中添加其余代码,如下所示:

$(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();
                });
              }
            });

})