[Codeigniter-users] jQuery/jsonの実装について

Back to archive index

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




Codeigniter-users メーリングリストの案内
Back to archive index