yfa76550
yfa76****@nifty*****
2012年 2月 9日 (木) 17:00:28 JST
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 この行は存在せず) これらの違いがよくわからないのですが、追々勉強してみます。 栗田 ---------- 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