我的jQuery中的变量范围问题

时间:2011-05-12 09:44:57

标签: jquery ajax arrays variables scope

我从后端PHP脚本中检索它们作为二维JSON数组后,我的变量范围出现问题。这是我的代码:

var qns, qis, ncs, nzs, tps;

function get_questions() {
    var url = "php/pytania.php";
    $.ajax({
        cache: false,
        type: "GET",
        dataType: "text",
        url: url,
        success: function(response) {
            data = jQuery.parseJSON(response);
            qns = data.qns;
            qis = data.qis;
            ncs = data.ncs;
            nzs = data.nzs;
            tps = data.tps;
        }
    });
}

$(document).ready(function() {
    var index = 0;
    get_questions();
    $("#question_no").text(qns[index]);
});

当我尝试最后引用我的qns数组时,它会显示一个变量undefined error。然而它在ajax语句中有效 - 没有问题......

谢谢并保重! :)

彼得。

3 个答案:

答案 0 :(得分:18)

问题是成功方法是异步调用的 - 意味着在调用$()。ajax并尝试引用变量之后,尚未分配它,因为尚未执行成功回调方法。 / p>

这可以通过将async选项设置为false来解决,如下所示:

$.ajax(
   {
      /* this option */
      async: false,
      cache: false,
      type: "GET",
      dataType: "text",
      url: url,
...

这意味着在获得响应之前,ajax调用之后不会执行任何其他操作。替代方法是将代码放置在成功回调方法本身所需的数组中。

答案 1 :(得分:4)

您的问题是您在数据到达之前尝试使用这些数据。

您可以添加在数据来自服务器后调用的回调函数:

var qns, qis, ncs, nzs, tps;

function get_questions(callback) {

   var url = "php/pytania.php"; 

   $.ajax({

      cache: false,
      type: "GET",
      dataType: "text",
      url: url,
      success: function(response) {

         data = jQuery.parseJSON(response);

         qns = data.qns;
         qis = data.qis;
         ncs = data.ncs;
         nzs = data.nzs;
         tps = data.tps;

         callback();

      }

   } );

}

$(document).ready(function() {

   var index = 0;

   get_questions(function(){

     $("#question_no").text(qns[index]);

   });

});

注意:您可以使用dataType: "json",然后自动解析响应,您不必使用parseJSON

答案 2 :(得分:0)

你应该为你的ajax请求添加一个回调函数,并尝试“$(”#items_no“)。text(qns [index]);”在回调函数中。您尝试在ajax请求实际加载之前访问该变量。