Php CodeIgniter AJAX,不';t更新/接收数据库中的新数据

Php CodeIgniter AJAX,不';t更新/接收数据库中的新数据,php,mysql,ajax,codeigniter,Php,Mysql,Ajax,Codeigniter,我在使用AJAX和CodeIgniter更新数据库时遇到问题。当有人发布AJAX表单时,我通过以下方式从数据库中检索有关用户的数据: class MY_Controller extends CI_Controller { public $memberData; public function __construct() { parent::__construct(); $this->memberData= $this->

我在使用AJAX和CodeIgniter更新数据库时遇到问题。当有人发布AJAX表单时,我通过以下方式从数据库中检索有关用户的数据:

class MY_Controller extends CI_Controller 
{
    public $memberData;

    public function __construct() 
    {
        parent::__construct();

        $this->memberData= $this->membermodel->getmemberData();
    }
}
(每个控制器扩展
MY\u控制器
,而不是
CI\u控制器

然后我对用户数据进行操作并将其插入数据库。问题是,如果我真的很快发送ajaxpost(同时发送几个),那么插入的行就很少相同(除了自动递增的行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'];
然后我做了这样的手术:

$("#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'];

最后,我得到了
值3
,在此基础上,我完成了整个脚本,并将最后一个查询插入到数据库中。不幸的是,正如我所说,如果我在同一时间发送许多
POST
请求,那么该值是恒定的。

我使用它,它应该可以从剪贴板中工作,我不久前发现它,所以不记得其来源。(将搜索它)

请阅读注释并使用控制台进行调试

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设置样式,显示错误等

  • 这样你们就不会(很少)在你们刚刚做的事情上有问题。

    你们期望什么?你需要一个新的逻辑,我想让用户知道他每10秒只能提交1次……我希望得到有用的评论,这可以帮助我理解为什么会发生这样的事情打开chrome开发者工具,在JavaScript中编写一些
    console.log()
    语句,看看你自己。我不是有意粗鲁,但这种问题纯粹是逻辑问题。最好的选择是锁定用户2-5秒(禁用提交按钮)。之所以会发生这种情况,是因为您加载了一个值x发送值y,并希望接收vaule_z,然后连续执行很多次。。。值_y尚未保存,因此再次拉取(旧)值_x。。。除了修复这个代码
    calculatedata($variab['value3'])(已删除
    )我可以限制此服务器端的效率,还是等待更新完成?我可以在哪里我不想信任用户。您需要验证发送的数据以确保安全(重复、空字段、权限)。使用。我给了你客户端解决方案,因为你没有提供足够的PHP代码。但如果有人改变了这个JS代码,他仍然能够对我的整个脚本进行bug,我必须保证它的安全。如果我不能修复我的代码,也许你可以告诉我如何正确地计划这个,我明白你的意思,只需在服务器端(PHP)做一个检查;如果两个值_3都是同一个值,有人篡改了JavaScript,那就是了。谢谢你的建议,但它不起作用。即使我从数据库中获取数据,也是在更新之前,所以我和以前处于同一点。