2

したがって、私の問題は、フォームをPHPに送信するときにjQueryを使用してAJAX経由でフォームを送信することです.jQuery AJAXを使用するときにどのボタンがフォームを送信するかは関係ありませんが、フォームアクションを使用するとフォームが送信され、削除または更新ボタンが押されました。たとえば、フォームを送信するための HTML は次のとおりです。

<input type="submit" name="update" value="Update">
<input type="submit" name="delete" value="Delete">

以下は AJAX 呼び出しです。

$(document).ready(function() {
    $("#update-form").submit(function () {
    $.ajax({  
      type: "POST",
      url: "updateHandler.php",  
      data: $("#update-form").serialize(),
      success: function(data) {
            var login = JSON.parse(data);
            if (login.success) {
                alert(login.message); //Show the ticket was updated!
            } else {
                alert(login.message);
            }
      }
    });  
    return false;       
  });
});

これが、AJAX が呼び出す PHP コードです。

<?php
    $json_data = array();
    if(isset($_POST['delete'])) {
        $json_data['message'] = 'Ticket was deleted!';
    } else {
        $json_data['message'] = 'Ticket was updated!';
    }


// Encode response as JSON
echo (json_encode($json_data));

?>

編集

コンソール出力を求められた後、ここに私が得たものがあります

adeneoによる回答のコードからの場合、「ボタンが押されていません」

{"success":true,"message":"ボタンが押されていません"}

配列
(
    [チケット番号] => 6
    [技術者] => 1
    [カテゴリ] => 1
    [メール] => nstark@mail.com
    [名前] => ネッド・スターク
    [国] => カナダ
    [issue] => 製品 Y に問題があります
)
4

1 に答える 1

3

プログラムで for を送信するときに、どのボタンを押したかわからないため、ボタンが送信されないため、ボタンがフォームでシリアル化されていませんでした。だから私がしたことは、非表示の入力を入れて、フォームを送信するためにクリックしたボタンに応じてその値を変更することでした。

また、更新する選択肢の値をデフォルトに設定したことに注意してください。これを行ったので、ユーザーがキーボードの Enter キーを使用してフォームを送信すると、エラーではなく自動的に何かが実行されます。

HTML

<input type="hidden" name="choice" id="choice" value="update">
<input type="submit" name="update" value="Update">
<input type="submit" name="delete" value="Delete">

jQuery

$('input[type="submit"]').click(function() {
     $('#choice').val(this.name)
});

PHP

if(isset($_POST['choice']) && $_POST['choice'] == "update") {
    //if user clicked update
} else if(isset($_POST['choice']) && $_POST['choice'] == "delete") {
    //user clicked delete.
}
于 2013-04-11T23:18:06.763 に答える