不止一次提交表格

时间:2016-01-25 10:03:15

标签: php jquery ajax submit

我有一页有3个表格。让我们说他们有以下ID:

  • ajax_form_one
  • ajax_form_two
  • ajax_form_three

每个字段都有简单的字段,如text和select,还有一个type ='submit'按钮。让我们说他们有以下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被调用一次,但是当我第二次单击该按钮时,该函数被调用两次。当我第三次点击它时,它被调用三次,依此类推,我的意思是......第四次,四次通话,第五次,五次通话。

如果我离开并返回页面,此行为将从零开始。

为什么我会出现这种行为?

我从本教程(https://www.youtube.com/playlist?list=PLfdtiltiRHWGXVHXX09fxXDi-DqInchFD

获取MVC的核心

代码是:

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

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;
    }
}}

2 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为每次单击按钮时,都会调用“保存一个”。这个函数实际上做的是声明提交表单的处理程序。所以它被调用然后重新声明,以便两个函数然后三个然后四个等附加到提交事件。 解决方案,要么采取这个

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

或从

中取出全部内容
function SaveOne(){

答案 1 :(得分:0)

您似乎有4个开放{括号,只有3个结束}括号。

不确定是否存在问题,因为此后您可能会有更多代码。