多次提交表单
Submiting form more than once
我的一页有 3 个表格。假设他们有以下 ID:
- ajax_form_one
- ajax_form_two
- ajax_form_three
每个都有简单的字段,如文本和 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被调用一次,但是当我第二次点击按钮时,该函数被调用了两次。当我第三次点击它时,它被调用了三次等等,我的意思是......第四次,四次调用,第五次,五次调用。
如果我离开并返回页面,此行为从零开始。
为什么我会出现这种行为?
我从本教程中获取的 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;
}
}}
您似乎有 4 个左 { 括号和 3 个右} 括号。
不确定这是否是问题所在,因为此后您可能还有更多代码。
发生这种情况是因为每次单击该按钮时,都会调用 Save one。这个函数实际上做的是在提交表单时声明一个处理程序。所以它被称为然后重新声明,以便两个函数然后三个然后四个等附加到提交事件。
解决办法,要么把这个拿出来
jQuery('#ajax_form_one').submit(function(){
或者从
中取出整个东西
function SaveOne(){
我的一页有 3 个表格。假设他们有以下 ID:
- ajax_form_one
- ajax_form_two
- ajax_form_three
每个都有简单的字段,如文本和 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被调用一次,但是当我第二次点击按钮时,该函数被调用了两次。当我第三次点击它时,它被调用了三次等等,我的意思是......第四次,四次调用,第五次,五次调用。
如果我离开并返回页面,此行为从零开始。
为什么我会出现这种行为?
我从本教程中获取的 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;
}
}}
您似乎有 4 个左 { 括号和 3 个右} 括号。
不确定这是否是问题所在,因为此后您可能还有更多代码。
发生这种情况是因为每次单击该按钮时,都会调用 Save one。这个函数实际上做的是在提交表单时声明一个处理程序。所以它被称为然后重新声明,以便两个函数然后三个然后四个等附加到提交事件。 解决办法,要么把这个拿出来
jQuery('#ajax_form_one').submit(function(){
或者从
中取出整个东西function SaveOne(){