2016-01-25 2 views
0

У меня есть одна страница с тремя формами. Допустим, они имеют следующие идентификаторы:Форма отправки не ранее

  • ajax_form_one
  • ajax_form_two
  • ajax_form_three

Каждый из них имеет простые поля, такие как текст и выбрать, но и тип = 'Отправить' кнопку. Допустим, они имеют следующие идентификаторы:

  • 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 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(); 
}} 

Код класса 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

Это происходит потому, что каждый раз, когда вы нажимаете кнопку «Сохранить один», вызывается. Фактически эта функция выполняет декларирование обработчика при отправке формы. Таким образом, он называется вызванным потом, так что к событию отправки присоединяются две функции, а затем три, а затем четыре и т. Д. решение, либо принять это из

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

или взять всю вещь из

function SaveOne(){ 
+0

Отлично !!!!! Вы спасли мою жизнь :-) Я взял объект JQuery и позволю функции просто с вызовом ajax, я имею в виду, из var dados, чтобы вернуть false. –

0

Кажется, что у вас есть 4 открытия {скобки и только 3 закрывающие} скобки.

Не уверен, что это проблема, поскольку после этого у вас может быть больше кода.

+0

Это скорее комментарий, чем ответ –

+0

Спасибо за внимание, это позор новичка вроде меня (с <50 рептом) не может комментировать вопросы :( – PaddyG

Смежные вопросы