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

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

ただいまの
回答率

90.60%

  • PHP

    19864questions

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

  • CakePHP

    2265questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

  • Ajax

    1066questions

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

ajaxのcallbackが「SyntaxError: Unexpected token メ」となる場合の解決法について

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,399

isoyan

score 37

[現状]
followボタンを押すとPOST通信が行われ、DB登録まではされることは確認しています。
ただしcallbackが'error'となってしまい、ステータスをみるとparser errorとなってしまいます。
json_encodeをしてからデータを渡しているのでparser errorとなる理由が分かりません。
よろしくお願いします。

[logの結果]
 'error': function(req, stat, ex) {
        console.log(stat);   
         console.log(ex);
}
console.log(stat)→parsererror
console.log(ex)
→SyntaxError: Unexpected token メ
    at Object.parse (native)
    at e.extend.parseJSON (http://code.jquery.com/jquery-1.7.2.min.js:2:10821)
    at cb (http://code.jquery.com/jquery-1.7.2.min.js:2:1373)
    at w (http://code.jquery.com/jquery-1.7.2.min.js:4:12340)
    at XMLHttpRequest.f.support.ajax.f.ajaxTransport.send.d (http://code.jquery.com/jquery-1.7.2.min.js:4:18318)

[実行環境]
PHP 5.6.8
CakePHP 2.7.0

[リソース]
[UsersController.php]
public function follow($id) {
        if ($this->request->is('get')) {
            //throw new MethodNotAllowedException();
        }
        echo "メソッド自体は実行されています。";
        if ($this->request->is('ajax')) {
            $this->loadModel('Follow');
        
            $data = array(
                "Follow" => array(
                    'user_id' => $this->Auth->user('id'),
                    'follow_id' => $id
                )
            );
        
            if ($this->Follow->save($data)) {
                $this->autoRender = false;
                $this->autoLayout = false;
                $response = array('id' => $id);
                $this->header('Content-Type: application/json');
                echo json_encode($response);
                //debug($response);
                exit();
            }
        }
        $this->redirect(array('action'=>'index'));
    }

[Users/index.ctp]
<ul>
<?php foreach ($users as $user) : ?>
<li id="user_<?php echo h($user['User']['id']); ?>">
<?php
echo $this->Html->link($user['User']['username']               
                       ,array(
                            'controller' => 'Users'
                            ,'action'=>'index'
                            , $user['User']['id'])
                      );
echo $this->Html->link('Follow', '#', array('class'=>'follow', 'data-user-id'=>$user['User']['id'])); 
?>
</li>
<?php endforeach; ?>
</ul>

<script>
$(function() {
    $('a.follow').click(function(e) {
        if (confirm('sure?')) {
            alert ('http://localhost/workgs/9/users/follow/'+$(this).data('user-id'));
            $.ajax({
                    'type': 'POST',
                    'dataType': 'json',
                    'url': 'http://localhost/workgs/9/users/follow/'+$(this).data('user-id'),
                    'success': function(res) {
                        alert("実行されています");
                        $('#user_'+res.id).fadeOut();
                    },
                    'error': function(req, stat, ex) {
                        alert("エラーです");
                        console.log(req);
                        console.log(stat);
                        console.log(ex);
                    }
                
            });
        }
        return false;
    });
});
</script>

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

デバッグ用の echo "メソッド自体は実行されています。"; がJSONの前に入っているのでパースエラーとなっているようです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/06 17:28

    お早めの回答ありがとうございました!
    助かりました。解決しました。
    このメソッドの中でecho したものについてコールバック関数の中に返すから、"メソッド自体は実行されています。"がjson_encodeされていなかったためパースエラーとなっているということでしょうか。

    キャンセル

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

  • ただいまの回答率 90.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    jqueryで、phpの変数名を書き換えて出力したい

    いつもお世話になっております。 書きの処理がどうしてもできず悩んでおります。 基本的な所がダメだとおもうのですが、解決の糸口が見つかりません。 ご教授よろしくお願いいたします。

  • 受付中

    jQuery+Ajax+PHP 文字列の違いに関して。

    現在下記のようなプログラムtest.phpのJSからAjax経由で別ファイルのPHPを呼び出しています。 route.phpの中身では$_POSTで値を受け取りDBから値を取り出す

  • 受付中

    ajax送信による画像アップロードができない

    jQueryのsuccessの部分がalertされません。 datatype jsonとすると、successのalertがうまく作動しません。 もちろんアップデートもできておりま

  • 解決済

    curlコマンドをjqueryのajaxで実行する方法

    curl -H \ "X-Cybozu-API-Token: AAAAAAAAAAAAAAA" \ -H "X-Cybozu-Authorization:BBBBBBBBBBBBB

  • 解決済

    CakePHP:ajaxにてPOST送信する際、データが受信できません。

    CakePHPにて、非同期通信でサーバーにアクセスするコードを書いているところですが、データが次のファイルに渡せません。 ファイル構成は、index.ctp(入力)、post.js

  • 解決済

    AjaxからPHPへデータを送信

    前提・実現したいこと monacaとOnsenUIを使って同一ディレクトリから取り出したtextをチェックボックスに入れてチェックした値をサーバーに渡すというプログラムを作ってい

  • 解決済

    「もっと見る」ボタンを消したい

    前提・実現したいこと 環境:cakePHP3, PHP5.6, HTML5, jQuery 現在「もっと見る」ボタンの実装を上記の環境を使って実装しています。

  • 解決済

    PHPとJavaScript間の連携について

    前提・実現したいこと PHPを使って業務画面を作成しています。 プルダウンから選択した内容でデータの絞り込みを行い、 絞り込まれた候補をセレクトボックスに一覧表示したいです。

同じタグがついた質問を見る

  • PHP

    19864questions

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

  • CakePHP

    2265questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

  • Ajax

    1066questions

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