2

ajaxを使ってフォームを送信していますが、

 function ajax_post() {
            // ...(code);
        var hr = new XMLHttpRequest();
        var url = "http://domain.com/submit_action.php";
        var vars = "element_1=" + ln + "&element_2=" + fn;
        hr.open("POST", url, true);
        hr.send(vars);
            // ...(code);
}

クエリを除くphpを持つ:

$sql = 'SELECT *
        FROM ' . table. '
        WHERE ' . $db -> sql_build_array('SELECT', $data);
$result = $db -> sql_query($sql);
$sql = 'INSERT INTO ' . table. ' ' . $db -> sql_build_array('INSERT', $data);
$db -> sql_query($sql);

上記のコードでは、実行されます。ただし、「fn」と「ln」が同じか、データベースに既に存在する場合、エラーが発生します。しかし、私はそれを送信するためにajaxを使用しているため、クエリがexcかどうかを知らずに、エラーが発生することなくフォームの現在のページにとどまります。

質問は、クエリのexc中に発生したエラーの種類をphpにajaxに伝える方法はありますか? 前もって感謝します。

4

1 に答える 1

2

PHPスクリプト中にエコーされたものはすべて、hr.responseXMLおよびhr.responseText属性に返されます。

ステータスが OK のときはいつでもコールバック内でこれら 2 つの値をキャッチhr.onreadystatechangeして、php で何が起こったかを確認します。

hr.onreadystatechange = function() {
    if (hr.readyState == 4 && (hr.status == 200)) {
        //do something with hr.responseText
    }
}

私は個人的に、PHP の回答を一般的な xml 応答内に体系的にカプセル化し、カスタマイズされたステータス (エラー/OK/ビジネス エラー) とカスタマイズされたメッセージを使用して、javascript レイヤーでそれを処理する方法を知っています。

これに加えて、1062 mysql エラーをキャッチして、エラーが既存の値によるものであることを認識し、よりユーザーフレンドリーなメッセージを表示することをお勧めします。

于 2012-06-03T16:58:11.220 に答える