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

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

ただいまの
回答率

89.86%

Ajaxでプルダウンの連動をしようとしていますがデータ取得してフォーム要素を設定でエラーになります。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,838

hidepon

score 184

AJaxで連動するプルダウンを作成したのですが、
データを飛ばして、jasnでデータを受信するまでは良いのですが、
プルダウンの生成時にエラーと判定されます。

var index    =    $(".department").index(this) + 1;
var val        =    $("#pd1" + index).val();
$.ajax({
    type: "POST",
    url: "/KU002",
    data: {"value":val},
    dataType: "json",
    success: function(data, status){
        $('#pd' + index).empty();
        $.each(data, function(key, vals){
            $('#pd' + index ).append($('<option>').text(vals).attr('value', key));
        });
    },
    error: function(XMLHttpRequest, status, errorThrown){
        alert("エラーが発生しました!");
    }
});

controller

<?php
//データ
class KU002 extends CI_Controller {
    function __construct(){
        // Model クラスのコンストラクタを呼び出す
        parent::__construct();
        $this->load->library('encrypt');
        $this->load->model('array_constant');
        $this->load->helper(array('form', 'url'));
        $this->load->library('form_validation');
        $this->load->library('form_ex');
        $this->load->library('common');
        $this->load->helper('string');
        $this->load->model('kmu002');
    }

    public function index(){
        //対象データの取得
        $ary        =    $this->kmu002->Get_Array();
        echo json_encode($ary);
    }
}
?>

model

<?php
class Kmu002 extends CI_Model {
    var $title   = '';
    var $content = '';
    var $date    = '';

    function __construct(){
        // Model クラスのコンストラクタを呼び出す
        parent::__construct();
        $this->load->model('array_constant');
    }

    //取得
    public function Get_Array(){
        //POSTデータ
        $post_array            =    array();
        $post_array            =    $this->input->post();
        $array                =    array();
        array_push($array,$post_array["value"]);
//        array_push($array,"55");
        //情報取得
        $sql  = " select eno as eno,ename as ename ";
        $sql .= " from master ";
        $sql .= " where code_department = ? ";
        $query                =    $this->db->query($sql,$array);
        $ary                =    array();
        $ary["-----"]        =    "選択してください";
        if($query->num_rows() > 0){
            foreach($query->result() as $row){
                $ary[$row->eno]        =    $row->ename;
            }
        }
//echo "<pre>";
//print_r($ary);
//echo "</pre>";
        return $ary;
    }
}
?>

データ(URL直アクセスでPHPにアクセスした場合)

{"003":"\u3066\u3059\u3068\u3000\u3066\u3059\u3068\uff13","014":"\u3066\u3059\u3068\u3000\u3066\u3059\u3068\uff11\uff10","040":"\u3066\u3059\u3068\u3000\u3066\u3059\u3068\uff11\uff17","075":"\u3066\u3059\u3068\u3000\u3066\u3059\u3068\uff12\uff14","100":"\u3066\u3059\u3068\u3000\u3066\u3059\u3068\uff13\uff11","114":"\u3066\u3059\u3068\u3000\u3066\u3059\u3068\uff13\uff18","125":"\u3066\u3059\u3068\u3000\u3066\u3059\u3068\uff14\uff12","136":"\u3066\u3059\u3068\u3000\u3066\u3059\u3068\uff14\uff15","145":"\u3066\u3059\u3068\u3000\u3066\u3059\u3068\uff15\uff10"}

こんなかんじでPHPからデータ取得しています。

(追記)

            error: function(XMLHttpRequest, status, errorThrown){
                alert("eT= " + errorThrown);
                alert("エラーが発生しました!");
            }


とすると
SyntaxError: Unexpected token :
というエラーが出るようになりました。
こちら検索して調査中ですが、イマイチ良い情報が出てきません

PHPからのデータは取れていると思いますが、どこがおかしいのかが分からず困っています。
デベロッパツールでもエラがでず不明です。
ご教授頂ければと思います。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • hidepon

    2017/05/25 09:48

    consoleを表示して[undefined]ということなので、値が撮れていないということですよね!?

    キャンセル

  • m.ts10806

    2017/05/25 09:54

    undefinedは変数未定義ということなので取れているかどうか以前の問題のように思います。ajaxに投げる前にindexやvalを取得していますが、それぞれ想定どおりの値が渡ってきているか、PHP側でも受け取れているかも確認してみてください。

    キャンセル

  • hidepon

    2017/05/25 14:04

    ajaxに投げる前にindexやvalを取得していますが、それぞれ想定どおりの値を送信できています。(開発ツールで確認)PHP側でも受け取れているようです(Jsonコードを開発ツールで確認)なぜエラーになるのかが理解できません。困っています。

    キャンセル

回答 1

checkベストアンサー

+1

まずはPHPがきちんとJSONの配列を返すようにすることです
例示のPHPはクラスだけで実態がわかりません。
とくにライブラリを多用しているみたいなので
一つ一つ検証しながら切り分けをしたほうがいいでしょう。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/05/25 14:01

    ありがとうございます。不要なライブラリを消去しているのですが。うまく作動しません。
    開発ツールとかいうのも利用したのですが、送信:パラメータ66 受信パラメータ: json コード5項目
    という状況で間違いがなさそうなのですが、原因が究明できません。コードとしてはあっているようなんですが。。。スミマセン、

    キャンセル

  • 2017/05/25 14:06

    まぁ現時点ではajaxを含むjavascriptの部分については無関係のようですので
    PHP側できちんとデータが取れるようになるまでデバッグするしかないでしょう

    キャンセル

  • 2017/05/25 14:09

    皆目見当つかず困っちゃっています。PHPもとてもシンプルに配列に入れて返しているだけなんで・・・。ファイル名を変えれば流れが変わるかな?とかいろいろ考えて実行しようとしています。
    いつも本当に有難うございます。

    キャンセル

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

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