0

現在、いくつかのコードをテストしており、基本的には HTML フォームを、サーバーで実行されているスクリプトの応答を表示する AJAX 呼び出し (POST) にリダイレクトしようとしています。

HTML

<form id='form' name='qform' method='post' action='./resources/comment-redirect.php'>

<input type='search' name='name' class='comment-instance' autofocus='autofocus' value='name' />

<input type='search' name='email' class='comment-instance' autofocus='autofocus' value='email (not published)' />

<TEXTAREA name='comment-box' class='comment-instance' COLS=60 ROWS=5 value='email' />

<button type='submit' id='comment-submit' value='Submit'>--SUBMIT--</button>

</form>

ジャバスクリプト

$('#comment-submit').click(function(e){
         e.preventDefault();

         console.log("User clicked");
         jQuery.ajax({
             type:'POST',
             url: './resources/comment-redirect.php',
             data: {'name':$('[name=name]').val().toString(), 'email':$('[name=email]').val().toString(), 'comment':$('[name=comment-box]').val().toString() },
             dataType: 'json',
             success: function(result){
             console.log(result);
            }

         }); //end of JQuery.Ajax()



//PHP
if( !empty($_GET['a'] ) )
{
    print("This request has been routed to GET\n");
}
else if( !empty($_POST) )
{
    print("This request has been routed to POST\n");
    print($_POST);
}
else
{
    print("Other");
}

現時点では、コンソール ウィンドウに「ユーザーがクリックされました」と表示されます。これは、コールバックが機能することを意味しますが、AJAX 応答はありません。私はブラウザを使用し、PHP スクリプトを手動でテストしましたが、これも成功しました (GET と POST の両方)。そのため、何らかの理由で、この Ajax 呼び出しが起動していないようです。

どんな助けでもスタックをいただければ幸いです。

4

1 に答える 1

0

type:'POST'ajax リクエストを設定しましたが、サーバー側では から送信されたデータを取得しようとしている$_GETため、最初はphpコードで配列をチェックする必要はありません。配列$_GETにデータを送信していることを知っているからです$_POST

あなたはこれを持っています

data: {
    'name':$('[name=name]').val().toString(),
    'email':$('[name=email]').val().toString(),
    'comment':$('[name=comment-box]').val().toString()
}

テキスト.toString()ボックスに数値が含まれていても、それは文字列として扱われています。

あなたは持ってdataType: 'json'いますが、あなたは印刷していませんjson string、ajson stringはこのように見えます

'{"key1":"value1","key2":"value2"}'

したがって、完全なコード (jQuery) は次のようになります。

$('#comment-submit').click(function(e){
    e.preventDefault();
    console.log("User clicked");
    $.ajax({
        type:'POST',
         url:'./resources/comment-redirect.php',
         data:{
             'name':$('[name=name]').val(),
             'email':$('[name=email]').val(),
             'comment':$('[name=comment-box]').val()
         },
         dataType: 'json',
         success: function(result){
              // Will output a JavaScript object (if a json string is returned)
             console.log(result);
         }
     });
});

サーバー側では、 a を返さない(印刷しない)場合は、次のようなものを使用して有効にjson string変更または返すdataTypehtmljson string

echo json_encode(array('key1' => 'value1', 'key2' => 'value2'));

したがって、successコールバックでJavaScriptオブジェクトを取得し、次のように使用できます

success:function(result){
    console.log(result.key1); // will output value1
    console.log(result.key2); // will output value2
}

が正しければ、url動作するはずです。現在のコードによっては、

if( !empty($_POST) )
{
    // everything in $_POST array will be encoded as a json string
    echo json_encode($_POST);
}

追加したい場合

print("This request has been routed to POST\n");

で、json stringこれを試すことができます

$_POST['msg'] = 'This request has been routed to POST';
echo json_encode($_POST);

成功のコールバックでは、次のように文字列 (msg) を取得できます。

console.log(result.msg); // will output "This request has been routed to POST"
于 2013-10-25T17:07:29.613 に答える