1

私はajaxを初めて使用し、ユーザーが送信ボタンをクリックしたときに、マーカーと呼ばれるjavascriptで作成した配列をPHPページに渡そうとしています。送信時に配列が存在し、スコープ内にあります。以下のコードは、それを実行しようとしているものです。送信ボタンをクリックすると、php ページに送信され、配列が渡されなかったことを意味する「失敗」が出力されます (コードの一部)。エラーは ajax コードで発生していると思いますが、それがどこから来ているのかわかりません。どんな助けも大歓迎です!

javascript/ajax のもの:

function submit_tour(){
    var input = JSON.stringify(markers);
    //var input = $(this).serialize();
    var sent = $.ajax({
            type: "POST",
            data: input,
            dataType: 'JSON',
            url: "test_portal2.php"
            }).done(function() {window.alert("done");})
            .fail(function() {window.alert("failed");});
    window.alert("" + input);
}

配列を送信することになっている HTML ボタン:

<form name="toursubmit" action="test_portal2.php" onsubmit="submit_tour()">
<input type="submit" value="Submit">
</form>

それをキャッチする PHP (test_portal.php ファイル内):

$ans = json_decode($sent);
echo $ans;
if ($ans != NULL){
    echo "works";
    echo $ans;
}
else {
    echo 'failed';
}
4

3 に答える 3

3

指摘すべきことがいくつかあります。

まず、関数内でデフォルトの POST アクションを防止する必要がありますsubmit_tour()。そうしないと、同期 POST が発生します。

次に、AJAX 呼び出しで contentType 値を として指定する必要がありますapplication/json

第 3 に、実際に JSON を PHP に POSTapplication/jsonし、ContentType として使用している場合は、次のように生の入力にアクセスして、PHP で JSON データを取得する必要があります。

$json = file_get_contents('php://input');
$obj = json_decode($json);

これは$_POST、フォーム エンコードされたコンテンツ タイプに対してのみ自動生成されるためです。

于 2013-03-27T17:24:47.767 に答える
1

あなたが送信すると

var input = JSON.stringify(markers);

マーカーには値がありません

<input type="hidden" id="markers" name="markers">     // No value anywhere

それからそれは確かにNullになります:)

また$sent、の値から変数を設定します$_POSTか? それが起こっているのを見ないでください

于 2013-03-27T17:19:34.420 に答える
0

これは form タグでは必要ありません。コードはフォームを送信しており、JS を実行していません。

form タグを削除するか、次のように入力してください: submit_tour(); 代わりにフォームの onsubmit で、false を返します。

于 2013-03-27T17:21:23.640 に答える