似たような記事がたくさんあるにもかかわらず、提案されたすべての解決策が私にはうまくいきませんでした。
次のようなスクリプトがあります。
jQuery('#term').keyup(ajaxChange);
function ajaxChange(){
var newFormChange = jQuery("#term").val();
alert (newFormChange);
jQuery.ajax({
type:"POST",
action: "my_test_action",
url: "/wp-admin/admin-ajax.php",
data: newFormChange,
success:function(data){
console.log(data);
}
});
return false;
}
そしてPHPは次のようになります。
function my_test_action() {
$var = "this is a test";
wp_send_json($var);
die();
}
add_action( 'wp_ajax_my_test_action', 'my_test_action' );
add_action( 'wp_ajax_nopriv_my_test_action', 'my_test_action' );
私も試してみました:echo json_encode($var)
ではなくwp_send_json()
またはecho $var
ですが、ブラウザコンソールではこの関数は常に0を返します。
私の他のAJAX呼び出しは機能します。たとえば、PHPクエリを呼び出していくつかの投稿を表示するWPスクリプトを呼び出す別のものがあり、それはうまく機能します。
編集: これが私のスクリプトが含まれる方法です:
function add_js() {
if (is_page_template()) {
wp_enqueue_script( 'mycustomscript', get_stylesheet_directory_uri().'/js/mycustomscript.js', array('jquery'), '1.0', true );
wp_localize_script('mycustomscript', 'ajaxurl', admin_url( 'admin-ajax.php' ) );
}
}
add_action('wp_enqueue_scripts', 'add_js');
jQuery(this).serialize();
は最初から機能しなかったので、問題はnewFormChange
変数から来ると思います。フォームは送信されずそのフィールドの1つだけが変更されるからです。だから私はそれをvar newFormChange = jQuery("#term").val();
に置き換えましたが、おそらくurl: "/wp-admin/admin-ajax.php"
に問題があります。
私はどこを間違えましたか?ありがとう
action
はdata
キーの内側になければなりません。あなたの投稿要求にはaction
という名前のキーがないので、コールバック関数は呼び出されません。
この例を考えます: -
jQuery.ajax({
type:"POST",
url: "/wp-admin/admin-ajax.php",
data: {
action: "my_test_action",
form_data : newFormChange
},
success: function (data) {
console.log(data);
}
});
注: /wp-admin/admin-ajax.php
のような相対的なAjax URLは絶対に使わないでください。 wp_localize_script()
を使うことができます。これらを参照してください 例
At url: "/wp-admin/admin-ajax.php"
に問題があるようですが、代わりにフルパスを追加してみてください。
function addajaxurl() {
wp_localize_script( 'frontend-ajax', 'frontendajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' )));
}
add_action( 'wp_enqueue_scripts', 'addajaxurl' );
そしてajax関数の中で変数を呼び出します。
jQuery.ajax({
type:"POST",
url: ajaxurl,
data: newFormChange,
success:function(data){
console.log(data);
}
});
問題はアクションパラメータにあります。あなたのJavaScript関数で試してみてください。
var newFormChange = jQuery("#term").val();
jQuery.ajax({
type: "POST",
url: "/wp-admin/admin-ajax.php",
data: {
action: "my_test_action",
newFormChange: newFormChange
} ,
success: function(data) {
console.log(data);
alert(data);
});
Die()も削除する必要があります。あなたのphp関数から。すでにwp_send_jsonにあります。