質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

2回答

3567閲覧

Ajaxの返り値末尾に「0」がついてしまう

fruitmachine

総合スコア47

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

1グッド

1クリップ

投稿2018/08/04 23:22

こちらにあげたコードの、js/script.js内でajax通信をするのですが、
返り値末尾に0がついてしまい困っています。
呼んでいる関数は、get-hearts.php内のghe_give_heartです。

どなたかわかる方、お願いいたします。。

php

1function get_heart_everyday() { 2 $post_id = get_the_ID(); 3 if(!get_post_meta($post_id, 'ghe_count', true)) { 4 add_ghe_fields($post_id); 5 } 6 7 echo ' 8 <div class="ghe-container"> 9 <div class="ghe-trigger" data-id="'.$post_id.'"> 10 <img src="' . plugins_url('get-hearts/images/inactive.svg') . '" alt="" class="ghe-image"> 11 </div> 12 <div class="ghe-count">'.get_post_meta($post_id, 'ghe_count', true).'</div> 13 </div> 14 '; 15} 16 17add_action( 'wp_ajax_ghe_give_heart', 'ghe_give_heart' ); 18add_action( 'wp_ajax_nopriv_ghe_give_heart', 'ghe_give_heart' ); 19function ghe_give_heart() { 20 $post_id = intval($_REQUEST['postId']); 21 $new_count = get_post_meta($post_id, 'ghe_count', true) + 1; 22 update_post_meta($post_id, 'ghe_count', $new_count); 23 24 $data = array( 25 'count' => get_post_meta($post_id, 'ghe_count', true) 26 ); 27 echo json_encode($data); 28} 29 30add_action('publish_post', 'add_ghe_fields'); 31add_action('publish_page', 'add_ghe_fields'); 32function add_ghe_fields($post_ID) { 33 if(!wp_is_post_revision($post_ID)) { 34 add_post_meta($post_ID, 'ghe_count', 0, true); 35 } 36}

js

1$(function() { 2 const $trigger = $('.ghe-trigger'); 3 $trigger.on('click', function() { 4 let $el = $(this); 5 let $image = $el.find('.ghe-image'); 6 let $count = $el.siblings('.ghe-count'); 7 8 let postId = $el.data('id'); 9 10 $.ajax({ 11 type: 'POST', 12 xhrFields: { withCredentials: true }, 13 dataType: 'text', 14 url: ajax_url, 15 cache: false, 16 data: { 17 action: 'ghe_give_heart', 18 postId: postId 19 } 20 }).then( 21 function(data) { 22 $image.attr('src', image_root_path + 'active.svg'); 23 $count.text(data); 24 }, 25 function() { 26 console.log('ajax error'); 27 } 28 ); 29 }) 30})

ちなみにコード全体は、Githubこちらにあげています。

ShotaTakazawa👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/08/05 01:16 編集

Fiddler などのパケットキャプチャツールを使うなどして、サーバー側の問題なのかクライアント側の問題なのか切り分けてください。
guest

回答2

0

自己解決

ごめんなさい、記入が漏れていましたがWordpressです。
admin-ajax.phpを見てみたら、最後にwp_die('0');とあり、テキスト0を返しつつphpでの処理を強制終了させているということのようです。(ふわっとした理解です)
ajaxでのリクエストでも処理が完了できるように、get_heart_everyday()の最後にdie();を追加することで解決できました。

理解が甘いので、

  • ajaxだとなぜ処理をきちんと完了できないのか

(.phpファイルでは同じようにechoで終了しても問題なく出力される)

  • 今回の解決策は正しい解決方法なのか

以上の2点ご教授いただきたいです。

投稿2018/08/05 05:07

fruitmachine

総合スコア47

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

回答ではなくただのコメントになってしまい大変恐縮ですが、投稿者様のおかげで解決ができたのでお礼のコメントをさせていただきます!
僕もwordpressのループ処理ををAjaxで実装して非同期通信化させたのですがどうしても謎の0が表示されてしまっていてかなり困っていました。
そんな時の投稿者様のこの質問ページのおかげで解決することができたので、本当に感謝の言葉しかありません????✨WordPress(PHP)って奥が深いですね????
本当にありがとうございます!!✨✨

投稿2021/08/13 12:21

ShotaTakazawa

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問