簡體   English   中英

CodeIgniter AJAX,不會更新/接收數據庫中的新數據

[英]CodeIgniter AJAX, doesn't update/receive new data in database

我使用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帖子的速度非常快(很少同時發送),很少插入的行是相同的(除了自動遞增行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請求,那么值是不變的。

我用它,它應該在剪貼板上工作, 我發現它不久前就不記得源了。 (會搜索它) 來源

請閱讀注釋並使用控制台進行調試。

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代碼,他仍然可以破壞我的整個腳本,我必須得到它的安全。

請考慮以下發展順序。

  1. 使用HTML創建表單
  2. 創建一個接受這種形式並驗證它php文件; 調試所有可能的輸入等
  3. 創建AJAX部分
  4. 使用CSS的樣式,顯示錯誤等。

這樣你就不會(很少)在你剛剛做的事情上遇到問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM