3

私はjQuery.ajaxメソッドについて読んだことがあり、これが私が必要としているものであるはずだと信じていますが、これまでのところ、それを機能させることはできません。

「users」というテーブルを使用してテストmysqlデータベースを作成し、そのテーブルに「name」と「location」の行を追加してから、コマンドラインを使用してデータを保存できることを確認しました。次に、ボタンのあるテストページを作成し、このコピーをスクリプトファイルに追加しました($.ajaxの部分はjQueryAPIの例から直接取得されています)。

$('#button').click(function(){
    saveData();
});

function saveData(){  
$.ajax({
       type: "POST",
   url: "process.php",
   data: { name: "John", location: "Boston" }
    }).done(function( msg ) {
 alert( "Data was saved: " + msg );
    });
}

「データが保存されました」というアラートメッセージが表示されますが、実際にはデータベースに何も保存されていません。process.phpで何か間違ったことをしているに違いありませんが、何が起こっているのかわかりません。process.phpのコードは次のとおりです(ここに表示しないデータベース、db_host、userなどの変数を設定します):

// 1. Create a connection to the server. 
$connection = mysql_connect($db_host, $db_user,$db_pwd);

// make sure a connection has been made
if (!$connection){
die("Database connection failed: " . mysql.error());
}

// 2. Select the database on the server
$db_select = mysql_select_db($database, $connection);
if (!$db_select){
die("Database selection failed: " . mysql.error());
}

// START FORM PROCESSING
if (isset($_POST['submit'])) { // Form has been submitted.
    $name = trim(mysql_prep($_POST['name']));
$location = trim(mysql_prep($_POST['location']));

// INSERT THE DATA 
$query = "INSERT INTO user ( name, location )
              VALUES ( '{$name}','{$location}' )";
        // Confirm if the query is successful.
        $result = mysql_query($query, $connection);
}
4

6 に答える 6

3

成功/エラーコールバックをキャプチャするためのより良い方法である「成功」と「エラー」の使用については、すでに他の人から言われています。しかし、何も挿入されないのは、実際には問題ではありません。それ以外に、Ajaxの呼び出しは良さそうです。

私が見る別の問題は、次のパラメータのみを渡していることです。

data: { name: "John", location: "Boston" }

ただし、PHPコードでは、送信ボタンが設定されているかどうかを確認します。

if (isset($_POST['submit']))

送信されるのはAjax呼び出しの「data」属性で渡すものだけであるため、これは明らかに当てはまりません。代わりに以下を使用してください:

if ( $_SERVER['REQUEST_METHOD'] == 'POST' )
于 2012-05-14T13:42:41.107 に答える
1

この例では、$_POST['submit'] は設定されていません。これは、通常どおりフォームを送信せず、ajax でデータを送信していて、「submit」という変数がないためです。

これはうまくいくかもしれません:

if ((isset($_POST['name'])) && (isset($_POST['location']))) { // Form has been submitted.
    $name = trim(mysql_prep($_POST['name']));
$location = trim(mysql_prep($_POST['location']));

// INSERT THE DATA 
$query = "INSERT INTO user ( name, location )
              VALUES ( '{$name}','{$location}' )";
        // Confirm if the query is successful.
        $result = mysql_query($query, $connection);
}
于 2012-05-14T13:40:30.590 に答える
0

従来のフォームではなく、ajaxを使用して送信しているため、送信は投稿の一部ではないと思われます。次のelse句をコードに挿入して確認してください。そのdieステートメントにヒットしている場合は、ifテストを削除します

if (isset($_POST['submit'])) { // Form has been submitted.
    $name = trim(mysql_prep($_POST['name']));
$location = trim(mysql_prep($_POST['location']));

// INSERT THE DATA 
$query = "INSERT INTO user ( name, location )
              VALUES ( '{$name}','{$location}' )";
        // Confirm if the query is successful.
        $result = mysql_query($query, $connection);
} else {
  die("$_POST['submit'] didn't exist");
}
于 2012-05-14T13:41:50.407 に答える
0

単純な間違いです。submitDBを更新する前に存在を確認しているときに、process.phpに投稿中に去りました

$('#button').click(function(){
    saveData();
});

function saveData(){  
$.ajax({
       type: "POST",
   url: "process.php",
   data: { name: "John", location: "Boston",submit:"submit" }
    }).done(function( msg ) {
 alert( "Data was saved: " + msg );
    });
}
于 2012-05-14T13:40:06.777 に答える
0

「やった」は「成功した」という意味ではありません。done: の代わりに、これを使用して、正常に終了したかどうかを確認します。

success: function(data)
    {
       alert(data);
    },
error:function (xhr, ajaxOptions, thrownError){
        alert("Error Status: " + xhr.status + " Thrown Errors: "+thrownError);
    }
于 2012-05-14T13:38:12.107 に答える
0

すべてのこと

.done(function( msg ) {
     alert( "Data was saved: " + msg );
});

ajaxリクエストが完了したことを示しています。おそらく.success代わりに見る必要があります。さらに、あなたのコードはこれを示していないので、これを行っていないと仮定していますが、実際に何かを返す必要があるmsgためphpです。(PHP人々はこれで私を助けてくれます。私は:).Netを手伝っている男です)JS

于 2012-05-14T13:39:49.360 に答える