相同的PHP函数使用JS提交多个时间。提交
我在用户使用JQuery单击提交按钮时提交表单。但是点击它会多次提交相同的表单,我不知道为什么会发生这种情况。尝试了很多东西,但都失败了。以下是代码。相同的PHP函数使用JS提交多个时间。提交
我在下面添加我的PHP,Javascript和HTML代码。
HTML:
<div class="box-body big">
<form id="pdf-generator" action="<?= $this->base; ?>/companies/generatePdf/" method="post" target="_blank">
<select id="pdfname" class="form-control" name="pdfname">
<option value="showfields">---Show Available Fields---</option>
<option value="29300____test1.pdf">29300____test1.pdf</option>
</select>
<input type="hidden" name="fieldPairs" id="fieldPairs" value="" />
</form>
<div class="divide-12"></div>
<button id="genPdfFormButton" type="button" class="btn btn-success pull-right">Generate PDF</button>
<div class="divide-12"></div>
</div>
JS:
$('#genPdfFormButton').click(function(){
var elements = document.getElementsByTagName("input");
var textAreas = document.getElementsByTagName("textarea");
var list = "";
var pair = "";
document.getElementById("fieldPairs").value = '';
//all input fields
for (var i=0; i<elements.length; i++) {
pair = elements[i].id + "=" + elements[i].value;
list = (list.length == 0) ? pair : list + "|" + pair;
}
//all textareas
for (var i=0; i<textAreas.length; i++) {
pair = textAreas[i].id + "=" + textAreas[i].value;
list = (list.length == 0) ? pair : list + "|" + pair;
}
document.getElementById("fieldPairs").value = list;
$('#pdf-generator').submit();
});
PHP:
public function generatePdf() {
$this->log("==>===============[start]=====================", 'debug');
$this->autoRender = false;
$pdfName = $this->request->data['pdfname'];
//get the submitted data
$formData = $this->processFormData($this->request->data['fieldPairs']);
if($pdfName == "showfields") { //show only form data fields
var_dump($formData);
} else { //generate PDF file
$this->log("==> gonna call generatePdf <== ", 'debug');
$pdf = new PdfForm(PDF.$pdfName, $formData);
$pdf->download();
}
}
当此代码调用PHP函数,我可以看到相同的日志消息多次因为函数被称为多次。
p.s:这个问题不是由于多次点击提交按钮。
因此浪费了大量的时间和调试大量的代码后,我固定的问题。这是由于我的浏览器中安装了IDM(Internet下载管理器)扩展。我禁用了它,一切开始按预期工作,函数现在只执行一次。
phew!
你应该每次禁用按钮,用户点击提交
$('#genPdfFormButton').click(function(){
$(this).prop('disabled', 'disabled');
...
}
这不是解决方案,因为问题不是由于多次单击表单按钮造成的。 – ManinGreen
最好禁用表单提交上的提交按钮而不是监听点击事件。如果表单数据不多次提交很重要,这是一个很好的做法。但是,听起来好像OP代码中存在一个需要首先修复的错误。 – drmonkeyninja
in'$ pdf-> download();'有代码强制浏览器下载文件。我强迫它使用标题和其中一个标题创建问题。也就是'header(“Content-Disposition:attachment; filename = {$ finalFileName}”);'如果我删除它或者将文件扩展名从PDF改为其他东西,函数不会再次调用。任何线索? – ManinGreen
对于初学者,您绝对不应该根据请求数据运行操作,而不必执行请求方法!即[**检查它是一个POST请求**](https://book.cakephp.org/2.0/en/controllers/request-response.html#inspecting-the-request),也许[**失败难无效请求**](https://book.cakephp.org/2.0/en/controllers/request-response.html#CakeRequest::allowMethod)。 ps,请始终提及您的确切CakePHP版本('vendor/cakephp/cakephp/VERSION.txt'或'lib/Cake/VERSION.txt'中的最后一行) - 谢谢! – ndm
我的cakephp版本是2.4.6。最初,我认为这个问题与JS有关。但是现在我意识到如果我删除pdf = new PdfForm(PDF。$ pdfName,$ formData);代码,它只打印一次日志。但是当这个代码在那里..它运行多次。任何线索? – ManinGreen