私はjQueryと、特にAJAXと比較的新しいです。戻り値が常に0であるという小さな問題がありますが、これは実際には成功メッセージであり、何も返さないと思います。
私はGoogleの詩を精査し、私はPHPコールバックのdie()関数を持っています、そして私はadd_actionsが正しいと信じます。
私はそれがそれに影響を与えることを疑いますが、これはフロントエンドではなく管理者にあるけれども、私はローカルホストに取り組んでいます。また、jsがエンキューされローカライズされていることも確認しました。
クロム開発者エリアに200 OKというメッセージが表示されます。
また、 http://codex.wordpress.org/AJAX_in_Plugins から基本的なAJAXをテストしたところ、0が返されました。これは、次に説明するコード以外のものではないかと思います。
今私はそれがjQueryに何かを送り返すようにしようとしています。任意の助けがいただければ幸いです。
jQuery
jQuery(document).ready(function(){
jQuery('.cl_link_buttons').val('id').click(function() {
var currentid = jQuery(this).attr('id');
//alert(currentid);
console.log(currentid);
jQuery.ajax ( data = {
action: 'cleanlinks_ajax_get_post_data',
url: ajaxurl,
type: 'POST',
dataType: 'text',
"currentid" : currentid
});
jQuery.post(ajaxurl, data, function(response) {
var dataz = response;
alert( dataz );
console.log (dataz); //show json in console
});
return false;
}); //end click event
}); //end doc ready
PHP
add_action("wp_ajax_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");
add_action("wp_ajax_nopriv_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");
function cleanlinks_ajax_get_post_data() {
$from_ajax = $_POST['currentid'];
echo "do" . $from_ajax . "something";
die();
}
だから私はそれを解決しました。私が改善したのは、それ自体jQueryではなかった、それはコールバック関数の配置でした。私はそれをメインのプラグインファイルに移動しましたが、うまくいきました。
0
応答は、アクションが(ajaxデータに)設定されていないか、またはアクションのコールバック関数が見つからないことを意味します。
あなたがしなければならないのはあなたの関数の最後にdie();
を追加することです。
理由ともっとここに見なさい: http://codex.wordpress.org/AJAX_in_Plugins
ノート:
echo
を実行する前に、何かをdie
する必要があります。これはサーバエラーを防ぎ、デバッグ時に役立ちます。私は同じ問題を抱えています。そしてそれを解決しました。例のように "action"変数を送信する必要があります。
var dataString = {lat: '55.56', lng: '25.35', action:'report_callback'};
$.ajax({
url: "http://domain.net/wp-admin/admin-ajax.php",
type: "POST",
//some times you cant try this method for sending action variable
//action : 'report_callback',
data:dataString,
success: function(data){
console.log(data);
},
error: function() {
console.log("Error");
}
});
なぜならwp-admin/admin-ajax.phpはアクション変数のハンドラだからです。
if ( empty( $_REQUEST['action'] ) ) {...}
Line 26
コンソールでこのコードを実行してみてください
jQuery.post(ajaxurl, {action:'cleanlinks_ajax_get_post_data'}, function(response) {
console.log (response);
});
私はあなたのJavaScriptコードに関して多くのことが間違っているのを見ることができます、そしてそれはその理由かもしれません。
あなたがajax URLを設定するのにwp_localize_script()関数を使わないなら、admin ajaxは0を返します。私はそれがWordpressのバグだと思います。これが例です:
wp_enqueue_script( 'search_js', get_template_directory_uri() . '/js/search.js', array( 'jquery' ), null, true );
wp_localize_script( 'search_js', 'ajaxurl', admin_url( 'admin-ajax.php' ) );
JavaScriptファイル(search.js):
$('#search_input').autocomplete({
source: function(request, response) {
$.ajax({
type: 'POST',
dataType: 'json',
url: ajaxurl,
data: 'action=my_custom_action_search&search_criteria=' + request.term,
success: function(data) {
response(data);
},
error: function(errorThrown){
console.log(errorThrown);
}
});
},
minLength: 3
});
jQuery(document).ready(function(){
jQuery('.cl_link_buttons').val('id').click(function() {
$.ajax({
type:'POST',
url: ajaxurl,
data: {
action : 'ajax_filter',
currentid : 'currentid'
},
success: function (result) {
console.log(result);
$result = $(result);
$result.fadeIn('7000');
$("#showresults").html(result);
},
error: function (xhr, status) {
alert("Sorry, there was a problem!");
},
complete: function (xhr, status) {
$('#showresults').slideDown('slow')
}
});
});
});
//コード関数php
<?php
add_action( 'wp_ajax_nopriv_ajax_filter', 'ajax_filter' );
add_action( 'wp_ajax_ajax_filter', 'ajax_filter' );
function ajax_filter(){
$date = isset($_POST['date']) ? $_POST['date'] : 0;
echo $date;
die();
}
?>
私もこの問題を抱えていました、そしてそれは私がPHP関数でreturn
の代わりにecho
を使っていたという事実でした。 echo
に変更することで修正されました。
function doAjax() {
$result = getPosts();
echo json_encode($result, true);
die();
}
私は同じ問題を抱えていました、それを修正するために私はecho
の直後の関数の最後に wp_die()
を使いました。あなたのスクリプトにあなたの行動を渡すことを忘れないでください。
念のため、関数が wp_ajax_nopriv
のようにwp_ajax
を使用する必要があるかどうかを確認してください。
参考までに、「ajax requestから0が返されています」とグーグルでお越しの方は、オブジェクトのメソッドにajaxアクションを追加するときに、メソッドのアクセス修飾子がpublic
であることを確認してください。
add_action( 'wp_ajax_my_action', [$object, 'my_method']);
add_action
は、$object
以外のメソッドを呼び出すことができない場合には単に沈黙します。