0

最新の編集: formprocessing.php では、isset($_POST['submit1']) が FALSE であることが判明しました ('submit1' は送信ボタンの名前になりました。元々は名前がありませんでした)。以下のコードに見られるように、私はもともとこれをテストしていません。

それは多くを説明します。しかし、残りの問題は、なぜisset($_POST['submit1']) が FALSE なのかということです。

注: この質問は、最近の洞察を反映するように編集されています。

PHP の初心者として、フォームをサーバーに投稿しようとしていますが、うまくいきません。おそらく私は単純なものを見落としていますが、それがわかりません。

「form.php」と「formprocessing.php」の 2 つのファイルがあり、どちらも同じフォルダーにあります。以下に完全なコードを含めましたが、最初にいくつか説明します。ファイル「form.php」には、「post」メソッドを含むフォーム自体が含まれています。ファイル「formprocessing.php」は、いわば「post」メソッドの宛先です。つまり、「action = formprocessing.php」です。

考え方は、「formprocessing.php」のロードや「form.php」のリロードを行わずにフォーム処理を実行する必要があるということです (したがって、form.php の「event.preventDefault();」)。「form.php」自体にも投稿できることは承知していますが、今のところ、2 つの別々のファイルを使用したいと考えています。

jQueryサイトから「form.php」のコードをほぼそのまま引用しました(http://api.jquery.com/jQuery.post/ 、最後の例)。action 属性のファイル名を「formprocessing.php」に変更し、必要な JSON.stringify コマンドを追加しました (以下を参照)。

「formprocessing.php」の残りのコードは、ポストされた入力フィールド (フォームには 1 つのフィールドしかありません) の値を抽出し、それを JSON オブジェクトの形式で「form.php」に返します (これは、form.php で文字列化されます)。少なくともそれがアイデアです!

「formprocessing.php」で生成されたスクリプト。- 入力フィールドに「xxx」と入力した後、次のようになります。

<script> {"content":"xxx"} </script>

私の目には、このスクリプトは正しいように見えますが、そうでしょうか? それが私が今確実に知りたい最初のことです。

編集: formprocessing.php のすべての HTML タグを削除しました。これは、生成されたスクリプトが {"content":"xxx"} 、つまり JSON オブジェクトのみに縮小されることも意味します。それでも結果は変わりません。

後で何かがうまくいかないからです。つまり、「form.php」の最後に、「formprocessing.php」から返されたデータの内容を div 要素に付けます。しかし、実際には、div に添付された文字列は "{"length":0,"prevObject":{"0":{},"1":{},"2":{},"3" になります。 :{},"4":{},"5":{},"6":{},"7":{},"8":{},"長さ":9},"セレクター": "#content"}" -- つまり、長さ 0 のオブジェクトを示します。'formprocessing.php' から返されると思われる実際のデータではなく (前述のように、フォーム フィールドへの元の入力にも等しい)。

「form.php」のコードは次のとおりです。

<!doctype html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <title>jQuery.post demo</title>
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>

<body>

    <form action="formprocessing.php" id="searchForm">
    <input type="text" name="s" placeholder="Search..." />
    <input type="submit" value="Search" />
    </form>

    <!-- the result of the search will be rendered inside this div -->
    <div id="result"></div>

    <script>

    /* attach a submit handler to the form */
    $("#searchForm").submit(function(event) {

    /* stop form from submitting normally */
    event.preventDefault();

    /* get some values from elements on the page: */
    var $form = $( this ),
    term = $form.find( 'input[name="s"]' ).val(),
    url = $form.attr( 'action' );

    /* Send the data using post */
    var posting = $.post( url, { s: term } );

    /* Put the results in a div */
    posting.done(function( data ) {
    var content = $( data ).find( '#content' );
    contentstring = JSON.stringify(content);
    $( "#result" ).empty().append( contentstring );

    });

    });

    </script>
</body>
</html>

「formprocessing.php」のコードは次のとおりです。

<!DOCTYPE html>
<html lang="nl">

<head>
    <meta charset="UTF-8" />
    <title>Contact</title>
    <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"></script>
</head>

<body>   

   <script>

   <?php
   echo "alert('Hello!');";
   $invoer = $_POST['s'];
   echo ( json_encode(array("content" => $invoer)) ); 
   ?>

   </script>

</body>
</html>

どんな助けでも大歓迎です。

4

2 に答える 2

0

これを試す#resultと、次のデータでいっぱいになります。

{"length":0,"prevObject":{"0":{},"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"length":9},"selector":"#content"}

おそらく、あなたが探しているものは完全ではありません。それとは別に、イベントがトリガーされますが、いくつかの致命的な間違いを犯しています:

  1. formprocessing.php が作成する id #content を持つ要素があります。
  2. ajax で alert() が実行されることはありません。ajax を使用すると、データを静的にロードするだけです。スクリプト要素はありますが、実際に実行されることは想定されていません
  3. おそらく、formprocessing.php から実際の json を発行したいだけでしょう。これを行うには、すべての html を取り除き、必ずapplication/jsonコンテンツ タイプを発行して jsonのみを返すようにします。
于 2013-08-20T02:13:50.090 に答える
0

formprocessing.php ファイルに必要なものは次のものだけです。

<?php
   $invoer = isset($_POST['s']) ? $_POST['s'] : 'not set';
   echo '$invoer is:'.$invoer; 
?>
于 2013-08-20T02:12:33.960 に答える