我一直在创建一个应用程序,它需要按钮对使用自动加载模型的控制器进行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”。
感谢您的时间,我希望有人可以帮助我。
答案 0 :(得分:2)
我是否误解了自动加载功能的工作方式?
嗯 ......是的。
自动加载表示在应用程序启动时自动加载(实例化)对象。因此,如果需要,我们不需要加载它们几次。
注意:只应自动加载必要/基本模型。
或者它与我使用Ajax有什么关系
在这种情况下,XHR请求充当普通的HTTP请求。当您向Controller/method
发送请求时,整个应用程序会在提供结果后运行并停止。
因此模型将丢失存储在其属性中的所有值。
我不确定这一点,但你可以将变量存储在Session中(在CI中使用$this->session->set_userdata()
)并稍后检索存储的值。
答案 1 :(得分:0)
每个ajax请求都是一个新页面加载,所以,当你先调用它时,你加载模型并设置变量,但是当你调用第二个请求时,你加载一个新的模型实例,为你的新值变量...我认为管理这个的最好方法是使用SESSIONS或COOKIES ......