2016-01-25 61 views
0

我有一頁3格式。可以說,它們具有以下的id:提交表單不止一次

  • ajax_form_one
  • ajax_form_two
  • ajax_form_three

每個人都有簡單的領域,如文本和選擇,也是一種類型= '提交' 按鈕。可以說,它們具有以下的id:

  • btSaveOne
  • btSaveTwo
  • btSaveThree

執行節能每種形式是一樣的過程代碼:

$("#btSaveOne").on("click", SaveOne); 

function SaveOne(){ 
     jQuery('#ajax_form_one').submit(function(){ 
      var dados = $('#ajax_form_one').serialize(); 
      jQuery.ajax({ 
       type: "POST", 
       url: "saveOne", 
       data: dados, 
       dataType: "json"}).done(function(response) 
       { 
        //do something 
       }); 
      return false; 
     }); 
    }; 

當我第一次點擊按鈕,php函數saveOne被調用一次,但是當我第二次點擊按鈕時,該功能被調用兩次。當我第三次點擊它時,它被稱爲三次等等,我的意思是......第四次,四次呼叫,第五次,五次呼叫。

如果我離開並返回頁面,則此行爲從零開始。

爲什麼我得到這種行爲?

我的MVC的,我從這個教程把核心(https://www.youtube.com/playlist?list=PLfdtiltiRHWGXVHXX09fxXDi-DqInchFD

的代碼是:

class App{ 

protected $controller = 'SaveController'; 
protected $method = 'index'; 
protected $params = array(); 

public function __construct() 
{ 
    $url = null; 
    if(isset($_GET['url'])) 
    { 
     $url = explode('/',filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL)); 
    } 

    if(file_exists('app/controllers/'. $url[0] . '.php')) 
    { 
     $this->controller = $url[0]; 
     unset($url[0]); 
    } 

    require_once 'app/controllers/'. $this->controller . '.php'; 

    $this->controller = new $this->controller; 

    if(isset($url[1])) 
    { 
     if(method_exists($this->controller, $url[1])) 
     { 
      $this->method = $url[1]; 
      unset($url[1]); 
     } 
    } 

    $this->params = $url ? array_values($url) : array(); 

    call_user_func_array(array($this->controller, $this->method), $this->params); 
    return false; 
}} 

的Class控制器代碼:

class Controller{ 

public function model($model) 
{ 
    require_once 'app/models/' . $model . '.php'; 
    return new $model();  
} 

public function view($view, $data = array()) 
{ 
    require_once 'app/views/' . $view . '.php'; 
} 

public function dao($dao) 
{ 
    require_once 'app/daos/' . $dao . '.php'; 
    return new $dao(); 
}} 

的Class SaveController代碼:

class SaveController extends Controller{ 

public function SaveOne() 
{ 
    $fake_variable = $_POST['x']; 

    $fakeObj = new FakeClass($fake_variable); 

    $dao = $this->dao('FakeDAO'); 

    if($dao->save($obj)){ 
     echo json_encode(array('success' => true)); 
     return; 
    } 
    else{ 
     echo json_encode(array('success' => false)); 
     exit; 
    } 
}} 
+1

是否禁用默認從提交按鈕提交。閱讀上面的代碼我會得到默認的提交行爲,然後你會在onclick事件中提交你的執行。它沒有解釋你的問題的累積性質,但它會增加它。 – Horaland

回答

1

發生這種情況的原因是,每次單擊按鈕時,都會調用Save One。這個函數實際上做了什麼就是聲明一個表單提交時的處理函數。所以它被稱爲then then redeclared,這樣兩個函數然後是三個然後四個等附加到提交事件。 解決方案,無論是採取了這一點

jQuery('#ajax_form_one').submit(function(){ 

或採取整件事出來的

function SaveOne(){ 
+0

完美!!!!!你救了我的生命:-)我把JQuery的東西拿出來,讓函數只是用ajax調用,我的意思是,從var dados返回false。 –

0

您似乎有4個開放{方括號和只有3個關閉}括號。

不知道這是否是問題,因爲您可能在此之後有更多的代碼。

+0

這是一個比回答更多的評論 –

+0

謝謝你的觀察,這是一個像我這樣的新手(與<50代表)不能評論問題:( – PaddyG