php - CodeIgniter AJAX,不更新/接收数据库中的新数据

标签 php mysql ajax codeigniter

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

class MY_Controller extends CI_Controller 
{
    public $memberData;

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

        $this->memberData= $this->membermodel->getmemberData();
    }
}

(每个 Controller 都扩展MY_Controller,而不是CI_Controller)。

然后我对用户数据进行操作并将其插入到数据库中。问题是,如果我非常快地发送 AJAX 帖子(同时很少),插入的行很少是相同的(自动递增行 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,我必须确保它安全。

请考虑以下开发顺序。

  1. 使用 HTML 创建表单
  2. 创建接受此表单的 php 文件并验证它;调试所有可能的输入等。
  3. 创建 AJAX 部分
  4. 使用 CSS 设置样式,显示错误等。

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

关于php - CodeIgniter AJAX,不更新/接收数据库中的新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27438989/

相关文章:

php - 在外部使用 WooCommerce 网关

带有 SQL 结果的 PHP 内存限制

mysql - 如何连接两个表但只返回与特定列不匹配的行,其中也包含 NULL?

mysql - 使用 C 将客户端输入插入 MySQL 数据库

mysql - 为什么我应该对关联表使用主 ID

javascript - 长轮询和服务器行为

php - PDO 从一个数据库插入到另一个数据库

php - JSON_PRETTY_PRINT 的缩进大小

javascript - 尽管 HTTP 状态为 200 OK,但 JQuery ajax GET 请求 URL 失败

javascript - 文件上传ajax :The body of your POST request is not well-formed multipart/form-data