Kenji Suzuki
kenji****@gmail*****
2012年 2月 9日 (木) 18:17:42 JST
Kenji です。 On Thu, 09 Feb 2012 17:00:28 +0900 yfa76550 <yfa76****@nifty*****> wrote: > Kenjiさん、 > アドバイス有り難う御座います。 > よく理解出来てないのですが、横取り丸/InetSpyのデータを報告致します。 > (A) > GET http://localhost/jcombo/script/jquery.jCombo.js HTTP/1.1 > javascriptの外部ファイルにアクセス > (X-Requested-With: この行は存在せず) > Accept: */* > Cookie xxxxxxxxxxxx > > (B解決前) > GET http://localhost/9/jcombo/getCountries HTTP/1.1 > Controllerにアクセス > X-Requested-With: XMLHttpRequest > Accept: application/json, text/javascript, */* > Cookie xxxxxxxxxxxx > > (B解決後) > GET http://localhost/9/jcombo/ HTTP/1.1 > Controllerにアクセス > X-Requested-With: XMLHttpRequest > Accept: application/json, text/javascript, */* > (Cookie この行は存在せず) これは、ブラウザからサーバへの HTTP request です。 そうではなく、サーバからブラウザへの HTTP response の違いを 調べるのがこういう場合のデバッグの手順です。 むろんリクエストを比較してみることも必要なこともありますが。 ご参考まで。 // Kenji > これらの違いがよくわからないのですが、追々勉強してみます。 > 栗田 > > ---------- Original Message ---------- > From: Kenji Suzuki <kenji****@gmail*****> > To: codei****@lists***** > Sent: Thu, 9 Feb 2012 16:32:12 +0900 > Subject: Re: [Codeigniter-users] jQuery/jsonの実装について > > >Kenji です。 > > > > > >On Thu, 09 Feb 2012 14:43:21 +0900 > >yfa76550 <yfa76****@nifty*****> wrote: > > > >> 色々調べたのですが、解決が見つからず、質問させて下さい。 > >> 通常のPHPではOKですが、codeigniterに移植すると、出力はPHPと同一なのですが、 > >> データがviewに伝わりません。 > >> > >> 例は、シンプルな1つのみのセレクトボックスをデータベースから作成するもので、 > >> 下記のサイトを参考にしました。 > >> http://www.prodiven.com/jcombo/index.php?lang=ja > >> > >> (A)通常のPHP + HTMLではOKですが、(B)Controller + Viewに移植すると、選択ボックスの中身が入りません。 > >> Controllerの出力は、PHPの場合と同一で、以下のjsonです。 > >> [["1","Brazil"],["2","Canada"],["3","United States"],["4","Venezuela"]] > > > >(A) と (B) の HTTP response を比較して違いを見つけてみましょう。 > > > > > >// Kenji > > > > > >> Firebugでのエラー表示はありません。 > >> バージョン: CI 2.0.3, XAMPP 1.7.1, PHP 5.2.9, MySQL 5.1.33 > >> > >> 色々と記述を変えてトライしましたが、データを表示出来ません。 > >> 他の同様のjQueryプラグイン(select-chain.js等)での移植は問題ないのですが。。 > >> プラグインの記述(Ajaxに関する)の仕方によっては、 > >> codeigniter側で何か調整する必要があるのでしょうか。。 > >> > >> 長くなりますが、コードを掲載します。 > >> 宜しくお願い致します。 > >> 栗田 > >> > >> > >> (B)Controller: application/controllers/jcombo.php > >> <?php > >> class Jcombo extends CI_Controller > >> { > >> function Jcombo() > >> { > >> parent::__construct(); > >> $this->output->set_header('Content-Type: text/html ;charset=UTF-8'); > >> $this->load->database(); > >> $this->load->helper('url'); > >> $this->load->view('jcombo_view'); > >> } > >> > >> function getCountries() > >> { > >> $query = "SELECT id_country, country_name FROM countries ORDER BY country_name ASC"; > >> $result = mysql_query($query); > >> $items = array(); > >> if($result && mysql_num_rows($result)>0) > >> { > >> while($row = mysql_fetch_array($result)) > >> { > >> $items[] = array( $row[0], $row[1]); > >> } > >> } > >> echo (json_encode($items)); > >> } > >> } > >> ?> > >> ++++++++++++++++++++++++++++ > >> View: application/views/jcombo_view.php > >> <!DOCTYPE html> > >> <html> > >> <head> > >> <meta charset="UTF-8" /> > >> <title>jcombo</title> > >> <script type="text/javascript" src="<?=base_url();?>javascript/jquery.js"></script> > >> <script type="text/javascript" src="<?=base_url();?>javascript/jquery.jCombo.min.js"></script> > >> <script type="text/javascript"> > >> $(function() { > >> $("#country").jCombo('<?=base_url();?>jcombo/getCountries'); > >> }); > >> </script> > >> </head> > >> <body> > >> <form> > >> <select name="country" id="country"></select> > >> </form> > >> </body> > >> </html> > >> > >> ++++++++++++++++++++++++++++ > >> ++++++++++++++++++++++++++++ > >> (A)通常のPHP + HTMLの場合 > >> PHP: localhost/jcombo/getCountries.php > >> <?php > >> include("config.php"); > >> $query = "SELECT id_country, country_name FROM countries ORDER BY country_name ASC"; > >> $result = mysql_query($query); > >> $items = array(); > >> if($result && mysql_num_rows($result)>0) { > >> while($row = mysql_fetch_array($result)) { > >> $items[] = array( $row[0], $row[1]); > >> } > >> } > >> echo(json_encode($items)); > >> ?> > >> ++++++++++++++++++++++++++++ > >> HTML: localhost/jcombo/index.html > >> <!DOCTYPE html> > >> <html lang="en"> > >> <head> > >> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> > >> <title>jQuery Combo</title> > >> <script type="text/javascript" src="script/jquery.js"></script> > >> <script type="text/javascript" src="script/jquery.jCombo.min.js"></script> > >> <script type="text/javascript"> > >> $(function() > >> { > >> $("select[name='country']").jCombo("getCountries.php"); > >> }); > >> </script> > >> </head> > >> <body> > >> <form> > >> <select name='country'></select> > >> </form> > >> </body> > >> </html> > >> ++++++++++++++++++++++++++++ > >> ++++++++++++++++++++++++++++ > >> ++++++++++++++++++++++++++++ > >> jQueryの外部ファイル: jquery.jCombo.min.js > >> /* > >> * jQuery jCombo Plugin (Minified) > >> * Carlos De Oliveira > >> * carde****@gmail***** > >> * > >> * Latest Release: Sep 2011 > >> */ > >> (function(a){a.fn.jCombo=function(b,d){function h(b,d,e,f,g){a.ajax({type:"GET",dataType:"json",url:d+e,success: > >> function > >> (a){var d="";if(a.length==0){d+='<option value="0"></option>';b.html(d)}else{if(f!=""&&f!=null){d+='<option value="0 > >> ">'+ > >> f+"</option>"}for(var e=0;e<a.length;e++){selected=a[e][0]==g?' selected="selected"':"";c=a[e];d+='<option value="'+ > >> c[0] > >> +'"'+selected+">"+c[1]+"</option>"}b.html(d)}b.trigger("change")}})}var e={parent:"",selected_value:"0", > >> parent_value:"", > >> initial_text:"-- Please Select --"};var d=a.extend(e,d);var f=a(this);if(d.parent!=""){var g=a(d.parent);g. > >> removeAttr > >> ("disabled","disabled");g.bind("change",function(c){f.attr("disabled","disabled");if(a(this).val()!="0"&&a(this).val > >> ()!= > >> "")f.removeAttr("disabled");h(f,b,a(this).val(),d.initial_text,d.selected_value)})}h(f,b,d.parent_value,d. > >> initial_text,d. > >> selected_value)}})(jQuery) > >> ++++++++++++++++++++++++++++ > >> 上記のフルバージョン: jquery.jCombo.js > >> /*! > >> * jQuery jCombo Plugin > >> * Carlos De Oliveira > >> * carde****@gmail***** > >> * > >> * Latest Release: Sep 2011 > >> */ > >> (function($) { > >> $.fn.jCombo = function(url, user_options) { > >> var default_options = { > >> parent: "", > >> selected_value : "0", > >> parent_value : "", > >> initial_text: "-- Please Select --" > >> }; > >> var user_options = $.extend( default_options, user_options) ; > >> var obj = $(this); > >> if(user_options.parent!="") { > >> var $parent = $(user_options.parent); > >> $parent.removeAttr("disabled","disabled"); > >> $parent.bind('change', function(e) { > >> obj.attr("disabled","disabled"); > >> if($(this).val()!="0" && $(this).val()!="") obj.removeAttr("disabled"); > >> __fill( obj, > >> url, > >> $(this).val(), > >> user_options.initial_text, > >> user_options.selected_value); > >> }); > >> } > >> __fill(obj,url,user_options.parent_value,user_options.initial_text,user_options.selected_value); > >> function __fill($obj,$url,$id,$initext,$inival) { > >> $.ajax({ > >> type: "GET", > >> dataType:"json", > >> url: $url + $id, > >> success: function(j){ > >> var choices = ''; > >> if (j.length == 0) { > >> choices += '<option value="0"></option>'; > >> $obj.html(choices); > >> } else { > >> if($initext!="" && $initext!=null) { > >> choices += '<option value="0">' + $initext + '</option>'; > >> } > >> for (var i = 0; i < j.length; i++) { > >> selected = (j[i][0]==$inival)?' selected="selected"':''; > >> c = j[i]; > >> choices += '<option value="' + c[0] + '"' + > >> selected + '>' + c[1] + > >> '</option>'; > >> } > >> $obj.html(choices); > >> } > >> $obj.trigger("change"); > >> } > >> > >> }); > >> } > >> } > >> })(jQuery); > >> > >> _______________________________________________ > >> Codeigniter-users mailing list > >> Codei****@lists***** > >> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > > > >_______________________________________________ > >Codeigniter-users mailing list > >Codei****@lists***** > >http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > > _______________________________________________ > Codeigniter-users mailing list > Codei****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users