我在使用AJAX和CodeIgniter更新数据库时遇到问题。当有人发布AJAX表单时,我通过以下方式从数据库中检索有关用户的数据:
class MY_Controller extends CI_Controller
{
public $memberData;
public function __construct()
{
parent::__construct();
$this->memberData= $this->membermodel->getmemberData();
}
}
(每个控制器扩展
MY_Controller
,而不是CI_Controller
)。然后对用户数据进行操作并将其插入数据库。问题是,如果我发送AJAX post非常快(同时发送的行很少),那么插入的行很少是相同的(除了自动递增的行ID)。看起来CodeIgniter没有从数据库接收到新的用户数据(或者以前没有更新过),我在旧的数据库上操作。
我这样发送AJAX:
$("#form_id").submit(function(event)
{
$form = $(this);
$.post($form.attr('action'), $(this).serialize(), function(HTML)
{
//do something
});
return false;
});
然后我做这样的手术:
$CI =& get_instance();
$CI->load->model('membermodel', 'member');
$variab['value3'] = $CI->memberData->member_value3 + 1; //this is the line that need to be new on every call, but it doesnt
$variab['result'] = $this->calculatedata($variab['value3']);
$parameters = array(
'member_value3' => $variab['value3']
);
//update that variable to database, so it should have new value new on next call
$CI->member->updateinfo($parameters);
return $variab['value3'];
最后,我得到
value3
,基于它我的整个脚本并将最后一个查询插入数据库。不幸的是,正如我所说,如果我在同一时间发送多个POST
请求,则该值为常量。 最佳答案
我用这个,它应该是从剪贴板里出来的,我刚才找到了,所以不记得来源了。(将搜索它)source。
请阅读注释并使用控制台进行调试。
var r;
$("#form_id").submit(function(event){
if (r) {
r.abort(); //abort all previous requests
}
var $form = $(this);
var $inputs = $form.find("input, textarea, select, button"); //serialize all elements in form
var serializedData = $form.serialize(); //serialize data (prep data)
$inputs.prop("disabled", true); //disable inputs
r = $.ajax({
url: $form.attr('action'), //whatever.php
type: "post",
data: serializedData
});
// Callback handler that will be called on success
r.done(function (response, textStatus, jqXHR){
console.log("Form works: " + response);
});
// Callback handler that will be called on failure
r.fail(function (jqXHR, textStatus, errorThrown){
console.error(
"Error: "+
textStatus, errorThrown
);
});
r.always(function () {
$inputs.prop("disabled", false); //enable inputs
});
// Prevent default posting of form
event.preventDefault();
});
关于注释:但是如果有人更改了JS代码,他仍然可以在我的整个脚本中安装bug,我必须保证它的安全性。
请考虑以下开发顺序。
使用HTML创建表单
创建接受此表单并对其进行验证的php文件;调试所有可能的输入等。
创建AJAX部件
使用CSS的样式,显示错误等。
这样你就不会(很少)在你刚刚做的事情上有问题。
关于php - CodeIgniter AJAX,不更新/接收数据库中的新数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27438989/