ユーザーが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:このコードは、私が機能するので、同じログメッセージを複数回見ることができます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();
}
}
複数の時間と呼ばれています。
p.s:この問題は、送信ボタンを複数回クリックしたことによるものではありません。
初心者の方は、リクエストメソッドに頼ることなくリクエストデータに基づいてアクションを実行しないでください!つまり、[** 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 =新しいPdfForm(PDF。$ pdfName、$ formData)を取り除くと実現しました。コードでは、ログを1回だけ出力します。しかし、このコードがあると、複数回実行されます。どんな手掛かり ? – ManinGreen