JavaScriptでサーバー側のアクセスカウントを取得したい

このQ&Aのポイント
  • JavaScriptを使用して、サーバー側に保管されているアクセスカウントを取得したいです。
  • 現在のコードでは、get_access_count.phpからアクセスカウントの情報を取得できません。
  • Ajaxを使用して非同期通信を行い、アクセスカウントの値を取得する方法を教えてください。
回答を見る
  • ベストアンサー

JavaScript アクセスカウントの取得したい

サーバー側に保管されているアクセスカウントをJavaScriptで取得したいです。 以下のようなコードを書きましたが、これでは、get_access_count.phpから、得たアクセスカウントの情報を得ることができません。(このPHPではサーバー上のアクセスカウントのデータを取得して、その値をechoします) // インデントは全角スペースです function getAccessCount(){   var sentdata = {        };   $.ajax({     type: 'post',     url: 'php/get_access_count.php',     cache: false,     data: sentdata,     success: function(count) {       // このcount の 値を getAccessCount()の戻り値にしたい     },     error: function() {      alert("エラー");     }   }); } (アクセスカウントはページを読み込んだあとに定期的に呼び出すため、Ajaxを使うのが、いいのかなと思いました。) 同期通信に変えたら、取得できますか?解決方法を教えて下さい。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 呼び出し側で var count = getAccessCount(); alert ( count ); getAccessCount()側で // このcountの値を・・・ return count; のような感じで作っているなら値は入ってきません。 非同期で通信処理を行っているのでgetAccessCount()を呼び出してもカウント値を取り終わる前に処理がすすんでいます。 やるとしたら以下のように同期通信にて取得するようにすれば値は入りますが、 通信開始から通信終了までブラウザはほかの処理を受け付けなくなります。 function getAccessCount() { var returnCount = -1; $.ajax({ type: 'post', url: '取得用.php', cache: false, async: false, data: {}, success: function(count) { returnCount = count; }, error: function() { alert ( 'error' ); } }); return returnCount; } どこか画面上に値を表示するとかであれば非同期通信にしたうえでsuccessの中に処理を書くことをオススメします。 $.ajax({ type: 'post', url: '取得用.php', cache: false, data: {}, success: function(count) { $('#count').html(count); }, error: function() { alert ( 'error' ); } });

newtgecko
質問者

お礼

ご回答ありがとうございます。 Ajaxを使うなら、後者の方法がいいのでしょうが、前者のやり方が、やりたかった方法です。これで実際に組んでみます。ありがとうございました。

その他の回答 (2)

  • ONEONE
  • ベストアンサー率48% (279/575)
回答No.3

ちょっと勘違いしていました。 非同期通信のレスポンスデータは戻り値にはできませんが、 関数として扱いたい場合は下記のように記述すればよいです。 getAccessCount(function(count){   alert(count); }); function getAccessCount(handleData){   var sentdata = {        };   $.ajax({     type: 'post',     url: 'php/get_access_count.php',     cache: false,     data: sentdata,     success: function(count) {       // このcount の 値を getAccessCount()の戻り値にしたい       handleData = count;     },     error: function() {      alert("エラー");     }   }); }

newtgecko
質問者

お礼

なんどもご回答ありがとうございます!申し訳ありませんが、他の回答で解決しました。ありがとうございました。質問の仕方が悪くて、回答しづらかったことをお詫びします。

  • ONEONE
  • ベストアンサー率48% (279/575)
回答No.1

そのURLに同期的にPOST(必要なパラメータを渡して普通のサブミットで遷移)したらブラウザ上に数字が表示されますか?

関連するQ&A

  • ajaxの結果をphpで取得する方法

    お世話になっております。 PHPは全くの初心者ですが、jqueryのajaxでGETした内容を PHPでも使用したく、ご教示願いたいのですが、 以下のajaxの「info.a」の値をphpで使用するには どうすればよいでしょうか。 $.ajax({ type: 'GET', scriptCharset:'utf-8', url: '/hoge.jsp', dataType: 'text', cache : false, }) .success(function(data){ var data = data.split(','); info = { a :data[0], b :data[1], }; }) .error(function(XMLHttpRequest, textStatus, errorThrown) { return false; }); <?php $a = $_GET['info.a']; ?> 何卒よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • cakePHP+Ajax アップロード状況の取得

    環境【cakePHP2.5, PHP5.5】 ファイルアップロードの進捗状況を取得してプログレスバーを表示したいのですが、うまくいかず困っております。 現状の方式は以下です(関連部分だけ抜粋) ●cakePHPのViewファイル(アップロードForm) <?php echo $this->Form->create('Model', array('type' => 'file')); ?> //Form作成 <?php echo $this->Form->hidden(ini_get('session.upload_progress.name'), array('value' => 'example')); ?> //PHPのアップロード状況取得設定 <?php echo $this->Form->file('upload_file'); ?> //ファイル選択 <?php echo $this->Form->submit('アップロード', array('div' => false, 'escape' => false));//submit ●Viewファイル内のjavascript(submitイベントを取得してajax通信) $(function() { $('#FormName').submit( function(event) { $.ajax({ url:'/controller/action', success:function (data, textStatus) { $('#progress').html(data); }, error:function (err) { console.log('ajax通信失敗:'+err); }, }); }); }); ●cakePHPのアクション ※アップロード処理は省略 public function action() { if ($this->request->is('ajax')) { //$_SESSIONキーから進捗状況を取得 $key = ini_get("session.upload_progress.prefix").'example'; $data = $_SESSION[$key]; //パーセンテージ計算 $progressData = round(($data["bytes_processed"]/$data["content_length"])*100); //結果表示用の変数に値を入れ、更新用のViewをrender $this->set(compact('progressData')); $this->render('/Elements/ajax/progress','ajax'); } } renderしているエレメントはアップロードViewファイルの中で指定しています。 大きく問題は2つあります。 1 ajax通信が動かない  cakePHPのアクションはキックしていますが(ログを吐かせて確認)、errorが返ってきます(errの中身は[ object Object ])。  ただし、submitイベント内ではなく、たとえば<input type=button>のonClickイベント関数の中に入れてやると正常に通信できます。  また、他にも数カ所ajax通信を行っている箇所がありますが、そちらは特に問題なく通信できています  なお、ajax通信部分をsetIntervalや関数に入れてSetTimeoutの中に含めると、アクションをキックすらできず何も動かない感じになります(なぜ…)  submitとajax通信は同時には出来ないものなのでしょうか? 2 ajax通信から$_SESSIONのupload_progress関連の値が取れない  ファイルアップロード中にcakePHPのアクションに普通にアクセス(GET)すると、アップロード状況が取得できるのですが、ajaxからこのアクションにアクセスすると値が取れない($_SESSION内にこのキーと値が存在しない)状態になります。  1の問題と絡んでいるような気もしますが、なぜajax通信のときだけ取得できないのか、原因が分からず困っております。 cakePHPでファイルアップロードの進捗を表示する機能をつくられている方など、なにかヒントを頂ければと思います。 なにとぞよろしくお願いします。

  • Ajax+JavaScriptにて外部データの取得について教えて下さい。

    お世話になります。 現在、JavaScriptとAjaxを勉強中なのですが、Ajaxを使ったデータ取得において、外部サーバデータ(例えばYahooホームページのソース)等を取得するには、PHPにて作成した簡易ブラウザが必要と記してありました。 つきましては、PHPでの簡易ブラウザのコードが記述されている書籍・サイトをご紹介頂けます様お願いします。 また、AjaxにてPrototype.jsなどを使っているのですが、具体的で実用的なAjaxの使い方をご教示頂けます様お願いします。 上記質問がカテ違いの場合はご指摘頂けます様お願いします。

    • ベストアンサー
    • AJAX
  • jsonでn番目から最後までを取得するには?

    phpでアクセストークンを使ったinstagram jsonデータの取得を試みています。 n番目から最後までのデータを取得するにはどのようにすればよいでしょうか? -------------------------------------------------------- <?php //POSTリクエストの場合のみ受付 if($_SERVER['REQUEST_METHOD'] == 'POST'){ //アクセストークン $access_token = "29587...fa062d9"; //JSONデータを取得して出力 echo @file_get_contents("https://api.instagram.com/v1/users/self/media/recent/?access_token={$access_token}"); //終了 exit; } ?> --------------------------------------------------------

    • 締切済み
    • PHP
  • ajaxで取得した配列の取り扱い

    こんにちは。 jqueryとphpを利用して、ajaxの練習をしているのですが、 受け取った配列の扱いではまってしまっています。 javascript.js $.ajax({ type : "post", url : "http://localhost/*****.php", data : post_data, datatype : "json", success :function(data,datatype){return_data(data);}, error : error_ajax(), }); php側では、受け取ったデータに応じて多次元配列を作り、jsonに変換してechoしています。 そして以下が成功時に実行する関数です。 function return_data(obj){ //配列topic以下を処理する関数 disp_topic(obj['topic']); //配列topic以下を処理する関数 dixp_tags(obj['tags']); } すると、obj['topic']が見つからないというエラーが出ます。 firebugsで見てみると、function return_dataの引数objには、jqueryがjsonからjavascriptのオブジェクトへ変換処理した配列が渡っているようです。。 引数objの値は以下のようになっていいます。 { "topic":  [{"tagno":"27","tags":"***"}], "tags":  [{"tagno":"27","tags":"****","count":"6"},   {"tagno":"29","tags":"****","count":"4"}, {"tagno":"1","tags":"****","count":"3"}, {"tagno":"9","tags":"****","count":"1"}] } 変数obj内のtopicに応じた配列と、tagsに応じた配列をそれぞれ取り出し、それぞれの関数で処理したいのですが、これを取り出すのにはどのようにしたらよいのでしょうか。 var array = obj['topic']; などと散々やってみたのですが、2日間解決できず・・・。 よろしくお願い申し上げます。

  • javascriptでJSONを取得する方法

    C#、asp.netでJson形式の文字列をjavascriptに渡してgooglemapで使用したいです。 json.netやらDynamicJson やらがインストールされていないと使用できないのでしょうか。 aspx.cs dynamic dataSet = 取得したlist; System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); serializer.Serialize(dataSet); javascript function json() { $.ajax({ url: ××.aspx.cs, type: "get", dataType: 'json', error: function () { alert("情報の読み込みに失敗しました"); }, success: function (data) {        alert("data"); } }); } こちらでは、情報の読み込みに失敗しましたとアラートが出てしまいます。 http://qiita.com/rbtnn/items/b2ec6c7dee792e66ac75 http://aspnet.keicode.com/basic/jquery-ajax-basics.php この2つのサイトを参考にしています。 dataSetの中身に目的のリストが取得できているのは確認済みです。 何がいけないのでしょうか。 どうやったらJSONをjavascriptで読み込めるのでしょうか。 どなたかよろしくお願いします。

  • 32進数の文字に+1カウントした値の取得

    Access(vba)で32進数の値に+1カウントした結果を取得したいと考えています。 引数、戻り値とも32進数の値の独自関数を作りたいです。 例) 11AF00 ⇒ 11AF01 11AF0Z ⇒ 11AF10 11AFZZ ⇒ 11AG00 下記のコードを途中まで考えましたが、繰り上がりとか考えてると???になってしまいました。 どなたかご教授お願いします。 Public Function P36進数カウント(str As String) Const alpha = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" Dim i As Integer Dim keta As Integer keta = Len(str)   ←桁数分LOOPするとか考えたのですが、ギブアップです。   Mid(str, i, 1) = Mid(alpha, InStr(alpha, Mid(str, i, 1)) + 1, 1) End Function

  • AJAXでクリック時にサーバーからfinctionを取得

    普通Javascripではfunction等は HTMLが読み込まれた際に実行または読み込まれますが、 AJAXでクリック時にサーバーからデータを取得する際に、 function(){}も取得したしてもそのfinctionは有効なのでしょうか? AJAXでデータは取得できても、functionなどのメソッドを取得してそれを有効にすることは可能でしょうか? よろしくお願いします。

  • 遠隔サーバー情報取得後発動のjavascript

    スマートフォンアプリをjavascriptで作っております。 ●【現在できていること】 【1】まずは、アプリ内から、自分の端末情報(下記の場合「G:8116556330」(取得方法はappleのシステムに準ずる)を取ります。(下記はわかりやすくするために固定で記載してますが、実際にはjavascriptによる読み込みとなります) 【2】次に、そのデータに関する情報を、自社サーバーのデータに取りに行きます。 ( $.post("https://hoge.jp/search.php", {search_term : name_id}, function(data)) 【3】その情報を表示させます。 【現在の仕様】 【3】を表示させるためには【1】【2】が完全取得された後に【3】用のfunctionを発動させなければなりません。 【1】取得のタイムラグ、【2】取得のタイムラグ、およびサーバーから端末までのタイムラグがあることから、現在、下記のようにbodyが読み込まれて5秒後に「document.getElementById('search_button2').click();」の形で時差クリックさせ「.click(function(e)」を発動させて【3】を表示させています。 【困りごと】 上記の方法だと、回線の混雑にかかわらず5秒後にクリックが発動されてしまうため、混雑時には表示できないリスクがあります。 【やりたいこと】 サーバーから端末に完全に情報を取得出来てから、即座に【3】用のfunctionを発動させたいです。または、クリックなど使用せず下記のGETスクリプト内で自動発動する方法があれば尚嬉しいです。 HTMLの読み込み後であればonloadが使用できますが、サーバー情報取得後というのが分かりません。ご指導いただきたくお願いいたします。 【GETスクリプト】 <script type="text/javascript"> var name_id; name_id = 'G:8116556330'; $(document).ready(function(){ $("#search_button2").click(function(e){ e.preventDefault(); ajax_search(); }); }); function ajax_search(){ $("#search_results").show(); $.post("https://hoge.jp/search.php", {search_term : name_id}, function(data){ if (data.length>0){ $("#search_results").html(data); } }) } </script> 【時差スクリプト(body読み込み後5秒後にボタンをクリック)】 <SCRIPT language="JavaScript"> function loadHello(){  document.getElementById('search_button2').click(); }  setTimeout(loadHello, 5000); </script> 【Body要素 ボタン 表示場所】 <body onLoad="loadHello()"> <a id="search_button2">search_button2</a> <div id="search_results"></div> </body>

  • アフィリエイトのようなカウントシステム

    アフィリエイトのように自分で配布したURLごとにカウントするというものを作りたいと思っています。 リンクを <a href="jump.php?no=1">マイHP</a> <a href="jump.php?no=2">マイHP</a> <a href="jump.php?no=3">マイHP</a> として、$_GET['no'] の値を見てカウント集計するという感じで考えてはいるのですが、どうすれば「no」ごとにカウントを取れるのかがわかりません。 単にカウントを取るプログラムは組めるんですが・・・ --------------------------------------------- <? header("Location: http://www.○○○.php"); ?> <?php $filename = "count.dat"; $file = fopen($filename, "r"); $count = fread($file, filesize($filename)); fclose($file); $count = $count + 1; print "$count"; $file = fopen($filename, "w"); fwrite($file, $count); fclose($file); ?> --------------------------------------------- このプログラムを応用して「no」ごとのカウントは出来るでしょうか?それとも、他のやり方の方がいいのでしょうか? どうかお教え願います。

    • 締切済み
    • PHP

専門家に質問してみよう