AJAXが常に0を返すことに問題があります。
私はその本ですべてを終えましたが、何が問題なのかわからないのですか。助けてください!!
これが私のAjax呼び出しです。
//Pass data through AJAX
var amountToConvert = price;
jQuery.ajax({
type:"POST",
url: "../../wp-admin/admin-ajax.php", // our PHP handler file
action: "ajaxConversion",
data: {
amount: amountToConvert
},
success:function(data){
alert(data);
},
error: function(errorThrown){
alert(errorThrown);
}
});
return false;
Functions.phpの関数は次のとおりです。
function ajaxConversion(){
$amount = mysql_real_escape_string($_POST['amount']);
echo $amount;
die();
};
add_action('wp_ajax_nopriv_ajaxConversion', 'ajaxConversion');
add_action('wp_ajax_ajaxConversion', 'ajaxConversion');
あなたのデータにアクション(ajaxConversion)を置いてチェックしてもらえますか?
jQuery.ajax({
type:"POST",
url: ajaxurl,
data: {
action: "ajaxConversion",
amount: amountToConvert
},
success:function(data){
alert(data);
},
error: function(errorThrown){
alert(errorThrown);
}
});
AJAX functionの最後にwp_die();
を使用すると問題が解決しました。
例えば
add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' );
function my_ajax_function(){
echo json_encode($myvar);
wp_die();
}
私にとってのトリックはwp_ajax_nopriv
アクションを追加することでした。 WP adminにログインしたときに1つのブラウザでスクリプトをテストしたところ、Chromeで同じスクリプトを試してみたところ、スクリプトが機能しないことがわかりました。 wp_ajax_nopriv
を書いた後、すべてが機能し始めました。 :)
add_action( 'wp_ajax_nopriv_erase_uploaded_images', 'erase_uploaded_images' );
add_action( 'wp_ajax_erase_uploaded_images', 'erase_uploaded_images' );
function erase_uploaded_images() {
$attach_id = filter_input( INPUT_POST, 'attach_id' );
wp_delete_attachment( $attach_id );
if ( isset( $_SESSION['uploaded_images'] ) ) {
$array_attachments = $_SESSION['uploaded_images'];
if ( ( $key = array_search( $attach_id, $array_attachments ) ) !== false ) {
unset( $array_attachments[$key] );
}
$_SESSION['uploaded_images'] = $array_attachments;
}
wp_die();
}
サーバー側で wp_send_json_success() および wp_send_json_error() の使用をお勧めします。あなたはdie()などについて心配する必要はありません、そして、 "status"変数は自動的に送られます、それはこのようにずっときれいです。例えば
function ajaxConversion(){
// ...
wp_send_json_success(array(
'amount' => $amount
));
}
このような結果になります。
{
"success":true,
"data":{"amount":125}
}
それで、あなたはあなたのajax呼び出しで値を簡単に抽出することができます:
jQuery.ajax({
type : 'post',
data : {
action: 'ajaxConversion',
//nonce : ajax.nonce
},
dataType : 'json',
url : ajax.ajaxurl,
success : function(data){
if(data.success) {
alert(data.amount);
} else {
alert(data.data.message);
}
}
});
私が遭遇したもう一つの一般的なことは、アクション名のタイプミスです。ログイン時には wp_ajax_nopriv_ {action} または wp_ajax_ {action} のようになります。
私にとっては、PHP関数でreturn
の代わりにecho
を使用していたという事実です。 echo
に変更することで修正されました。
function doAjax() {
$result = getPosts();
echo json_encode($result, true);
die();
}