Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Codeigniter活动记录过快?_Javascript_Jquery_Codeigniter_Activerecord - Fatal编程技术网

Javascript Codeigniter活动记录过快?

Javascript Codeigniter活动记录过快?,javascript,jquery,codeigniter,activerecord,Javascript,Jquery,Codeigniter,Activerecord,我为我的网页的翻译创建了“管理菜单”,包括图片,所以你在图片中。 这非常简单,我将所有内容保存到数据库中,当我进行更改时,我会重新生成所需的文件,例如/languages/english/tank\u auth\u lang.php。每当我想翻译/编辑一些东西时,我只需单击field edit,然后单击out of field AJAX将POST发送到负责插入/更新/添加翻译的控制器 问题 这是我的功能,但每当我执行快速重新发送(重新编辑/向表中添加新翻译)时,有时数据库中会出现重复。有什么我

我为我的网页的翻译创建了“管理菜单”,包括图片,所以你在图片中。

这非常简单,我将所有内容保存到数据库中,当我进行更改时,我会重新生成所需的文件,例如
/languages/english/tank\u auth\u lang.php
。每当我想翻译/编辑一些东西时,我只需单击field edit,然后单击out of field AJAX将POST发送到负责插入/更新/添加翻译的控制器

问题

这是我的功能,但每当我执行快速重新发送(重新编辑/向表中添加新翻译)时,有时数据库中会出现重复。有什么我应该避免做的吗?(比如在发送前等待或做其他事情)

如果我进行分析,它会告诉我有两个相同的插入(不是在一个AJAX调用中,而是在两个连续的fastAJAX调用中)

函数本身一开始很复杂,因为每当有比524更长的(
strlen()
)值时,我会以不同的方式保存它(我将它保存在带有结构
TEXT
的表中,而不是
VARCHAR(524)

功能

public function insert() {
    //this function is used only with AJAX
    if ($this->input->is_ajax_request()) {
        //$this->output->enable_profiler(FALSE); //to work profiler must be turned off

        $id_kw = $this->input->post('id_kw');
        $id_language = $this->input->post('id_language');
        $translation_text = $this->input->post('new_translation');


        if (strlen($translation_text) < '524') {
            //short
            if ($this->general_model->isInDBWhere('layout_short', array('id_keyword' => $id_kw, 'id_language' => $id_language))){
                //update short
                //get id of text_short and update text field in it
                $text_id = $this->general_model->_getColumnWhere('layout_short', 'id_text', array('id_keyword' => $id_kw, 'id_language' => $id_language));
                $this->general_model->updateRow('text_short', $text_id, array('text' => $translation_text));
                unset($text_id);
            }elseif ($this->general_model->isInDBWhere('layout_long', array('id_keyword' => $id_kw, 'id_language' => $id_language))) {

                $text_id = $this->general_model->_getColumnWhere('layout_long', 'id_text', array('id_keyword' => $id_kw, 'id_language' => $id_language)); //old text_id
                $this->general_model->_deleteWhere('text_long', array('id' => $text_id));
                $this->general_model->_deleteWhere('layout_long', array('id_keyword' => $id_kw, 'id_language' => $id_language));
                //insert new entry to short

                $this->_insert($table = 'short', $id_kw, $id_language, $translation_text);
            }else{
                //insert in short
                $this->_insert($table = 'short', $id_kw, $id_language, $translation_text);
            }
        }else{
            //long
            if ($this->general_model->isInDBWhere('layout_long', array('id_keyword' => $id_kw, 'id_language' => $id_language))){
                //update long
                //get id of text_long and update text field in it
                $text_id = $this->general_model->_getColumnWhere('layout_long', 'id_text', array('id_keyword' => $id_kw, 'id_language' => $id_language));
                $this->general_model->updateRow('text_long', $text_id, array('text' => $translation_text));
                unset($text_id);
            }elseif ($this->general_model->isInDBWhere('layout_short', array('id_keyword' => $id_kw, 'id_language' => $id_language))) {

                $text_id = $this->general_model->_getColumnWhere('layout_short', 'id_text', array('id_keyword' => $id_kw, 'id_language' => $id_language)); //old text_id
                $this->general_model->_deleteWhere('text_short', array('id' => $text_id));
                $this->general_model->_deleteWhere('layout_short', array('id_keyword' => $id_kw, 'id_language' => $id_language));
                //insert new entry to long

                $this->_insert($table = 'long', $id_kw, $id_language, $translation_text);
            }else{
                //insert in short
                $this->_insert($table = 'long', $id_kw, $id_language, $translation_text);
            }
        }
        echo "1";
    }
}

将java脚本更改为

var flag = 0;


$(".ajax-translate-field").on("focusout", function(){
    console.log($(this).prop('name'));
    console.log($(this).attr('data-language'));
    console.log($(this).val());
    var this_object = $(this);
    if ($(this).val() === "") {
        this_object.animate({ backgroundColor: '#FF9494', opacity: '0.6'}, "slow");
        this_object.animate({ backgroundColor: '#ffffff', opacity: '1'}, "fast");
    }else if(flag != $(this).prop('name')){
        flag = $(this).prop('name');
        $.ajax({
            url: _baseUrl + 'admin/language/insert',
            type: 'POST',
            data: {id_kw: $(this).prop('name'), id_language : $(this).attr('data-language'), new_translation: $(this).val()},
            success: function (result) {
                if (result == 1) {
                    this_object.animate({ backgroundColor: '#BCED91', opacity: '0.6'}, "slow");
                    this_object.animate({ backgroundColor: '#ffffff', opacity: '1'}, "fast");
                }else{
                    //nothing happens here yet
                }
            },
            complete: function (result) { flag = 0;}
        });
    }

});

我假设
$(this).prop('name')
是您代码中的唯一键(id)..

请发布您的javascript。如果是两个连续的ajax调用,那么问题出在您的javascript中,而不是您的控制器。如果您已经在处理该事务,则需要为表单分配一种
事务id
,忽略它。要计算事务id,您可以对表单值进行散列,以便为每次更改获得唯一的值,也可以在页面上获得固定的值。是的
$this.prop('name')
是唯一的id,我将尝试此方法。@Kyslik:In
Complete
方法设置
标志=0
var flag = 0;


$(".ajax-translate-field").on("focusout", function(){
    console.log($(this).prop('name'));
    console.log($(this).attr('data-language'));
    console.log($(this).val());
    var this_object = $(this);
    if ($(this).val() === "") {
        this_object.animate({ backgroundColor: '#FF9494', opacity: '0.6'}, "slow");
        this_object.animate({ backgroundColor: '#ffffff', opacity: '1'}, "fast");
    }else if(flag != $(this).prop('name')){
        flag = $(this).prop('name');
        $.ajax({
            url: _baseUrl + 'admin/language/insert',
            type: 'POST',
            data: {id_kw: $(this).prop('name'), id_language : $(this).attr('data-language'), new_translation: $(this).val()},
            success: function (result) {
                if (result == 1) {
                    this_object.animate({ backgroundColor: '#BCED91', opacity: '0.6'}, "slow");
                    this_object.animate({ backgroundColor: '#ffffff', opacity: '1'}, "fast");
                }else{
                    //nothing happens here yet
                }
            },
            complete: function (result) { flag = 0;}
        });
    }

});