私はAJAXを取得してJqueryで作業しようとしています。これまでの私の最大の問題は、どこでミスを犯しているかを把握する方法がわからないことです。 AJAX呼び出しをデバッグする良い方法が本当にない。
私が作成したい機能の1つが、SQLデータベースに設定された権限を変更することである管理ページを設定しようとしています。 .click関数がトリガーされていることを知っているので、それを絞り込みましたが、チェーン内のどこでAJAX SQLクエリの呼び出しが間違っているのかわかりません。
私の.jsコード:
$('#ChangePermission').click(function(){
$.ajax({
url: 'change_permission.php',
type: 'POST',
data: {
'user': document.GetElementById("user").value,
'perm': document.GetElementById("perm").value
}
})
})
私の.phpハンドラー:
<?php
require_once(functions.php);
echo $_POST["user"];
try{
$DBH = mysql_start();
$STH = $DBH->prepare("INSERT INTO people ( username, permissions ) values (?, ?)");
$STH->bindParam(1, $_POST["user"]);
$STH->bindParam(2, $_POST["perm"]);
$STH->execute();
}
catch(PDOException $e){
echo $e->getMessage;
}?>
Mysql_startは、他のSQL呼び出しで正常に使用するPDO関数のセットアップです。
私はここ数日間、チュートリアルの調査と検索を行ってきましたが、私の人生では何が間違っているのかを理解することはできません。エラーが発生している場所を特定するために使用できるツールはありますか?私は明らかにこの特定の問題に対する答えに興味がありますが、ここでの私のより大きな問題は、どこからデバッグを始めるべきかわからないということです。ご協力いただきありがとうございます!
次のような成功およびエラーコールバックを追加して、JQuery呼び出しをより堅牢にします。
$('#ChangePermission').click(function() {
$.ajax({
url: 'change_permission.php',
type: 'POST',
data: {
'user': document.GetElementById("user").value,
'perm': document.GetElementById("perm").value
},
success: function(result) { //we got the response
alert('Successfully called');
},
error: function(jqxhr, status, exception) {
alert('Exception:', exception);
}
})
})
ほぼすべての最新のブラウザを使用して、[ネットワーク]タブを学習する必要があります。こちらをご覧くださいSO投稿について デバッグ方法AJAX呼び出し 。
mozilla firefoxを使用している場合は、firebug
というアドオンをインストールするだけです。
ページでmozillaのf12を押すと、firebugが開きます。
firebugのnet
タブに移動し、このタブでxhr
タブに移動します。ページをリロードします。 xhr
Params
Headers
Response
HTML
およびCookies
に5つのオプションがあります。
したがって、response
とhtml
にアクセスすると、ajax呼び出し後にどの応答が得られているかを確認できます。
問題がある場合はお知らせください。
Firefox(FF)拡張機能としてのFirebugは、現在(2017年1月現在)AJAX呼び出しからの直接JavaScript応答をデバッグする唯一の方法です。残念ながら、開発は中止されています。互換性の問題のため、Firebugもインストールすることはできません。
残念ながら、FFネイティブ開発者ツールは、AJAX呼び出しによって直接返されたJavaScriptをデバッグできません。同じことがChrome開発ツールに当てはまります。
現在のプロジェクトのXHR呼び出しからJSをひどくデバッグする必要があるため、この問題のためにFFのアップグレードを無効にしなければなりません。良いニュースではありません-直接JS応答をデバッグする機能がFF/Chrome開発者ツールにすぐに組み込まれることを期待しましょう。
JQueryがロードされた後、コードの前にこれを追加してください。
$(window).ajaxComplete(function () {console.log('Ajax Complete'); });
$(window).ajaxError(function (data, textStatus, jqXHR) {console.log('Ajax Error');
console.log('data: ' + data);
console.log('textStatus: ' + textStatus);
console.log('jqXHR: ' + jqXHR); });
$(window).ajaxSend(function () {console.log('Ajax Send'); });
$(window).ajaxStart(function () {console.log('Ajax Start'); });
$(window).ajaxStop(function () {console.log('Ajax Stop'); });
$(window).ajaxSuccess(function () {console.log('Ajax Success'); });
成功関数を使用できます。一度これを参照してください jquery.ajax settings
$('#ChangePermission').click(function(){
$.ajax({
url: 'change_permission.php',
type: 'POST',
data: {
'user': document.GetElementById("user").value,
'perm': document.GetElementById("perm").value
}
success:function(result)//we got the response
{
//you can try to write alert(result) to see what is the response,this result variable will contains what you prints in the php page
}
})
})
error()関数を持つこともできます
これがあなたを助けることを願っています
Firebigをインストールして、エラーが発生している場所を確認します。また、ajax呼び出しでコールバックを設定して、PHPからエラーメッセージを返すこともできます。例えば。
error: function(e){
alert(e);
}
これは、ajax呼び出し後にphpエラーをjavascript console.logにデバッグして取得するために行うことです。
$('#ChangePermission').click(function () {
$.ajax({
url: 'change_permission.php',
type: 'POST',
data: {
'user': document.GetElementById("user").value,
'perm': document.GetElementById("perm").value
},
success: function (data) {
console.log(data);
},
error: function (data) {
console.log(data);
}
});
});
php側では、文字列concatに返されるすべてのエラーを要求することから始め、jsonエンコードされた応答としてエコーします。これには、もしあればphpエラーメッセージも含まれます。
<?php
error_reporting(E_ALL);
require_once(functions . php);
$result = "true";
$DBH = new PDO("mysql:Host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$STH = $DBH->prepare("INSERT INTO people ( username, permissions ) values (?, ?)");
if (isset($_POST["user"]) && isset($_POST["perm"])) {
$STH->bindParam(1, $_POST["user"], PDO::PARAM_STR);
$STH->bindParam(2, $_POST["perm"], PDO::PARAM_STR);
}
try {
$STH->execute();
} catch (PDOException $e) {
$result .= $e->getMessage;
}
echo json_encode($result);
?>