在AJAX调用后,CodeIgniter自动加载模型的变量会丢失

时间:2014-01-16 12:43:52

标签: php jquery ajax codeigniter autoloader

我一直在创建一个应用程序,它需要按钮对使用自动加载模型的控制器进行ajax调用。我的印象是自动加载模型中的变量在Ajax调用后会保留它们的值,但由于某种原因,整个模型(包括它们的变量)都丢失了它们的新值。

我是否误解了自动加载功能的工作方式,或者是否与使用Ajax有关?

以下参考代码。

自动加载:

$autoload['model'] = array('choice_model');

在JQuery中调用Ajax:

$( document ).ready(function() {
    var encounter = 1;

    $.ajax({
        type: "POST",
        url: baseURL+"Encounter/startEncounter",
        dataType: "json",
        data: "encounter_id=" + encounter,
        success: function(data) {
            $("#message-box").html(data);
            SetChoices();
        }
    });
});

function SetChoices() {

    $.ajax({
        type: "POST",
        url:  baseURL+"Choice/getChoices",
        dataType: "json",
        data: "",
        success: function(data){
            alert (data);
        }
    });
}

第一个ajax调用将Choice_model中的以下变量设置为“TestTrue”:

public $test = 'TestFalse';

第二个ajax调用返回上一个变量,但它的值现在再次为“TestFalse”。

感谢您的时间,我希望有人可以帮助我。

2 个答案:

答案 0 :(得分:2)

  

我是否误解了自动加载功能的工作方式?

......是的。

自动加载表示在应用程序启动时自动加载(实例化)对象。因此,如果需要,我们不需要加载它们几次。

注意:只应自动加载必要/基本模型。

  

或者它与我使用Ajax有什么关系

在这种情况下,XHR请求充当普通的HTTP请求。当您向Controller/method发送请求时,整个应用程序会在提供结果后运行并停止。

因此模型将丢失存储在其属性中的所有值。

寻找解决方案?

我不确定这一点,但你可以将变量存储在Session中(在CI中使用$this->session->set_userdata())并稍后检索存储的值。

答案 1 :(得分:0)

每个ajax请求都是一个新页面加载,所以,当你先调用它时,你加载模型并设置变量,但是当你调用第二个请求时,你加载一个新的模型实例,为你的新值变量...我认为管理这个的最好方法是使用SESSIONS或COOKIES ......