2

POST 経由で HTML ボタン タグから PHP 処理スクリプトにデータを送信しようとすると、かなり厄介な問題が発生します。

これが私のコードです...

(1) HTML フォーム:

 <form id="pub-form1" method="post">
      <button type="submit" name="All" value="true">All Publishers</button>
      <button type="submit" name="Current" value="true">Current Publishers</button>
      <button type="submit" name="Users" value="true">User Priveleges</button>
 </form>

(2) POST リクエストを処理する jQuery スクリプト:

$(document).ready(function () {
$('#pub-form1').submit(function (e) {
    e.preventDefault();
    $('#results').contents().remove();
    var formData = $(this).serialize();
    $("input").prop("disabled", true);
    request = $.post('VRC_PublishersProcess.php', formData, resultsMessage);
    request.fail(function() { 
        $('#results').append("<span id=\"reply\">Your search failed for an unknown reason. Please try again in a few minutes.</ span>");            
        $("input").prop("disabled", false); });


    function resultsMessage(data) {
        $('#results').append(data);
        $("input").prop("disabled", false);
    }
  });
});

(3) PHP 処理スクリプト:

    //All Publishers
if(isset($_POST['All'])) {
    if(!empty($_POST['All'])) {
        $result = $members->selectAllMembers();
        if($result === true) {
            exit(); //Kill the process
        }
        else {
            echo $result;
            exit(); //Kill the process
        }
    }
    else {
        $error = "<span id=\"reply\">Not all fields were entered correctly!</ span>";
        echo $error;
        exit(); //Kill the process  
    }
}

//Current Publishers
if(isset($_POST['Current'])) {
    if(!empty($_POST['Current'])) {
        $result = $members->selectCurrentPublishers();
        if($result === true) {
            exit(); //Kill the process
        }
        else {
            echo $result;
            exit(); //Kill the process
        }
    }
    else {
        $error = "<span id=\"reply\">Not all fields were entered correctly!</ span>";
        echo $error;
        exit(); //Kill the process  
    }
}

//Users
if(isset($_POST['Users'])) {
    if(!empty($_POST['Users'])) {
        $result = $members->selectUserPublishers();
        if($result === true) {
            exit(); //Kill the process
        }
        else {
            echo $result;
            exit(); //Kill the process
        }
    }
    else {
        $error = "<span id=\"reply\">Not all fields were entered correctly!</ span>";
        echo $error;
        exit(); //Kill the process  
    }
}

問題の原因が何であるかはよくわかりません。javascript または PHP によってスローされたエラーはありません。ページは空白のままで、結果はありません。

jQuery関数は正しく動作しているようです。私は他のフォームでその特定のものを数回使用しましたが、POST リクエストを適切に処理します。失敗を引き起こすことさえできました。正しく反応しました。

PHP 処理スクリプトも正常に機能しているようです。これも、同じページからの POST 要求を正常に処理した他のスクリプトから派生したものです。

私の疑いは、HTML フォーム自体に集中しています。これらは私の理論です: (1) ボタンは「それ自体」を送信していません。つまり、テキストやその他の形式の入力がないため、送信するものは何もありません。(2) 何らかの理由で、PHP スクリプトが探している名前と一致しません。たとえば、"All Publishers"が送信された場合、私の PHP スクリプトは$_POST['All']. しかし、何らかの理由で、そのリクエストは PHP スーパーグローバル配列のその識別子で保存されません。

私の目標は、データを表示する 3 つのオプションをエンド ユーザーに提供することです。現在、それは機能していません。

フィードバックをお待ちしております。

最終的解決:

  <div id="pub1">
            <a href="#" class="drop" id="one">Other</a>
            <div id="displayselect" method="post">
                <form id="select1" method="post">
                    <input type="hidden" name="All" value="1" />
                </form>
                <form id="select2" method="post">
                    <input type="hidden" name="Current" value="1" />
                </form>
                <form id="select3" method="post">
                    <input type="hidden" name="Users" value="1" />
                </form>
                <button type="submit" name="All" form="select1">All Publishers</button>
                <button type="submit" name="Current" form="select2">Current Publishers</button>
                <button type="submit" name="Users" form="select3">User Priveleges</button>
           </div>
        </div>

明らかに、適切な変更が jQuery で行われました...

4

1 に答える 1

3

理解した、

jQuery.serialize はボタン ( http://api.jquery.com/serialize/ )ではinput, textarea, selectうまくいきませんでした。シリアル化するときにタグを追加しようとしましたが、シリアル化されたものを確認したので、フォームを少し変更する必要があります。button<input type="submit" ...submit<input type="hidden" name="test" value="1" />test=1

テスト用の jsFiddle: http://jsfiddle.net/4D8Nz/

于 2013-07-18T07:12:44.753 に答える