在我的jQuery AJAX调用范围之外移动数据

时间:2011-10-04 02:27:32

标签: javascript jquery

我有一个小的AJAX函数,询问服务器是否应该检查特定的复选框。我想将信息传递给AJAX函数范围之外的变量。有点像:

isChecked = $.ajax({
                type: "POST",
                url: "/ajax/subscribe-query/",
                data: "selfKey=" + commentData['selfKeyValue'],
                success: function(isSubscribed){
                    if(isSubscribed == 'true'){
                        return = true;
                    }
                    else{
                        return = false;
                    }
                }
            })

var isChecked; 
$.ajax({
                type: "POST",
                url: "/ajax/subscribe-query/",
                data: "selfKey=" + commentData['selfKeyValue'],
                success: function(isSubscribed){
                    if(isSubscribed == 'true'){
                        isChecked = true;
                    }
                    else{
                        isChecked = false;
                    }
                }
            })

当然,这些都不是。我该怎么做?

2 个答案:

答案 0 :(得分:2)

var isChecked; 
$.ajax({
                type: "POST",
                url: "/ajax/subscribe-query/",
                data: "selfKey=" + commentData['selfKeyValue'],
                success: function(isSubscribed){
                    if(isSubscribed == 'true'){
                        isChecked = true;
                    }
                    else{
                        isChecked = false;
                    }
                }
            });
alert('isChecked');

在此代码中,即使在ajax成功函数中正确设置了'isChecked'属性,警报也会说undefined,因为ajax调用是Asynchronous。它将在ajax成功函数返回之前引发警报。因此,你需要在像这样的ajax成功函数之后完成你的工作。在ajax成功之后,您可以传递变量来完成工作。

           $.ajax({
                    type: "POST",
                    url: "/ajax/subscribe-query/",
                    data: "selfKey=" + commentData['selfKeyValue'],
                    success: function(isSubscribed){
                        chek(isChecked);//pass the variable here
                    }
                });


  function chek(isChecked){
     if(isChecked){
         $('#YourCheckbox').attr('checked','checked')
     }
     else{
         $('#YourCheckbox').removeAttr('checked')
     }

  }

答案 1 :(得分:0)

我建议创建一个具有isChecked属性的对象。这比使用简单的全局变量更安全。例如:

var inputObj = {};
$.ajax({
                type: "POST",
                url: "/ajax/subscribe-query/",
                data: "selfKey=" + commentData['selfKeyValue'],
                success: function(isSubscribed){
                    if(isSubscribed == 'true'){
                        inputObj.isChecked = true;
                    }
                    else{
                        inputObj.isChecked = false;
                    }
                }
            })