1

次のような HTML ファイルがあります。

<script>
$(document).ready(function () {
   $("#btn").click( function() {
     var id = $('#id').val();
     var name =  $('#name').val();
     var Address = $('#Address').val();
     $.ajax({
        url: "http://localhost/connection.php",
        type: "POST",
        data : { topost: JSON.stringify({id: id, name: name, Address: Address}) },
        //I ASSUME HERE IM PASSING MY THREE FIELDS id, name and Address 
        //IN A STRING CALLED 'TOPOST' TO MY FILE CONNECTION.PHP
        //WHICH IS HOSTED ON MY LOCALHOST, IM USING XAMPP.
        datatype: "jsonp",
        success: function (status) {
            if (status.success == false) {
                alert("Failure!");
            }
            else {
                alert("Success!");
            }
        }
     });
     return false;
   });
});
</script>

今、connection.php自分のローカルホストでホストされているファイルで、これら 3 つのフィールドを読み込んで、3 つすべてをデータベース (MySQL) に入れることができるようにしようとしています。

ただし、エラーは次のとおりです。

Connected to database!<br />
<b>Notice</b>:  Undefined index: topost in <b>C:\xampp\htdocs\connection.php</b> on line <b>27</b><br />
<br />
<b>Notice</b>:  Undefined index: topost in <b>C:\xampp\htdocs\connection.php</b> on line <b>29</b><br />

私の質問は:

「topost」が定義されていないのはなぜですか? connection.php「topost」という変数で、HTML ファイルから JSON データを送信していることを理解するにはどうすればよいですか?

そのため、次の PHP ファイルを確認して、エラーを提案してください。

サーバー側の PHP ファイル:

<?php
    header('Content-type: application/json');
    header('Access-Control-Allow-Origin: *');
    $server = "localhost";
    $username = "root";
    $password = "";
    $database = "jqueryex";
    $con = mysql_connect($server, $username, $password);
    if($con) { echo "Connected to database!"; }
    else { echo "Could not connect!"; }
    //or die ("Could not connect: " . mysql_error());
    mysql_select_db($database, $con);
    $posteddata = $_POST['topost'];
    $thedata= json_decode($_POST['topost']);
    echo ($thedata);
    mysql_close();
?>
4

1 に答える 1

0

本文は、 JSONPOST形式ではなく、URL エンコードする必要があります。次の質問を参照してください。

Javascript オブジェクトのクエリ文字列エンコーディング

さらに詳しい情報と POST 本文の例を次に示します。

http://www.jmarshall.com/easy/http/#postmethod

したがって、あなたの場合、コードは次のようになります。

$.ajax({
    url: "http://localhost/connection.php",
    type: "POST",
    data: $.param({
        topost: encodeURIComponent(
            JSON.stringify({id: id, name: name, Address: Address})
        )
    });
    datatype: "jsonp",
    success: function (status) {
        if (status.success == false) {
            alert("Failure!");
        } else {
            alert("Success!");
        }
    }
});

追加の注意:"jsonp"データ型として指定しています。つまり、スクリプトは、jsonp の動作と一致する関数呼び出しでオブジェクトの応答をラップする必要があります。もう 1 つのオプションは、CORS ヘッダー (Access-Control-Allow-Origin) を PHP 応答に追加して、CORS に対するチェック XMLHttpRequestをサポートするブラウザーで接続できるようにすることです。Origin

jQuery.ajax()JSONP データ型の詳細については、http://api.jquery.com/jQuery.ajax/ のドキュメントを参照してください。

于 2012-07-10T17:02:49.667 に答える