Ajaxでプルダウン連動(SJIS環境)

このQ&Aのポイント
  • Ajaxを使用してプルダウンメニューを連動させようとしています。
  • SJIS環境でエンコードしているため、エラー処理の表示ができません。
  • 配列のkey部分には連続しない数値が入ります。どこが悪いのか教えてください。
回答を見る
  • ベストアンサー

AJAXでプルダウン連動(SJIS環境)

Ajaxでプルダウン連動をしようとしています。 id="prm"と設定したプルダウンを変更して プルダウンprm2を設定しようとしています。 エラー処理の表示もできません。 SJIS環境でエンコードしています。 jsonには入っています。 配列のkey部分には連続しないコードの数値が入ります。 どこが悪いのか教えてください /* test.php */ $sql = "select hoge,foo "; $sql .= " from table_a "; $sql .= " where start <= '".date("Y-m-d")."' "; $sql .= " and end >= '".date("Y-m-d")."' "; $sql .= " ・・・・・ "; $sql .= " ・・・・・ "; $pnt = DbExec($conn, $sql); if (@mssql_num_rows($pnt)){ while ($rows = mssql_fetch_array($pnt)) { $hoge = mb_convert_encoding($rows['hoge'],"UTF-8"); $foo = mb_convert_encoding($rows['foo'],"UTF-8"); $c_ary[$hoge] = $foo; } } echo json_encode($c_ary); /* HTML */ $(function(){ //プルダウンに変更 $('#prm').change(function(){ var prm = $('#prm').val(); $.ajax({ url : "test.php", dataType : "json", data : {prm:prm}, type : "post", success: function(data, status){ $("#prm2").empty(); $.each(data,function(i) { $('#prm2').append($('<option>').attr({ value: i }).text(data[i])); }); },error : function(){ alert(data.responseText); } }); }); });

  • AJAX
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • shockatz
  • ベストアンサー率80% (153/191)
回答No.1

完全に検証してなくて申し訳ないんですが、 1.phpの json_encode() 関数はSJIS未対応 2.ブラウザの HttpXmlRequest(要するにAjax)もSJIS未対応 の二重苦で、結局全部UTF-8にしないと動作しないんと違いますか?

関連するQ&A

  • AJAX+PHPでセレクトボックスの連動

    AJAX+PHPでセレクトボックスの連動をしようとしています。 function SelAjax(){ var x = $('#category1').val(); $.ajax({ type: "POST", url: "category.php", data: {"prm":x}, dataType: "json", success: function(data, status){ $.each(data,function(i) { $('#category2').append($('<option>').attr({ value: i }).text(data[i])); }); }, error: function(XMLHttpRequest, status, errorThrown){ alert("エラーが発生しました!"); } }); } としています。 PHP側で $CATEGORY2 = array( 1 => array( 1 => "a", 2 => "b", 3 => "c", 4 => "d", ), 2 => array( 1 => "e", 2 => "f", 3 => "g", 4 => "h", ), 3 => array( 1 => "i", 2 => "j", 3 => "k", 4 => "l", ), 4 => array( 1 => "m", 2 => "n", 3 => "o", 4 => "p", ), 5 => array( 1 => "q", 2 => "r", ), 6 => array( 1 => "s", 2 => "t", 3 => "u", ), ); $ary = array(); if($_POST["prm"]){ for($i=1;$i<=6;$i++){ if($i ==$_POST["prm"] ) $ary = $CATEGORY2[$i]; } } echo json_encode($ary); としています。 一回目に1番目のセレクトボックスを選択してAjaxでPOSTし2つ目のセレクトボックスを生成できました。 しかし、2回目として1番目のセレクトボックスを選択した際に、1回目にPHPから受け取った配列に積みあがってしまいます。 どのように対処すればいいかわかりません。 教えてください。

    • ベストアンサー
    • AJAX
  • ajaxでPHPにPOST送信して結果データを受信しようとしていますがうまくいきません。

    セレクトボックスの値を受け取りPOST送信 <HTML側> function SelValue(){ var x = $('#category1').val(); $.ajax({ type: "POST", url: "category.php", data: {"prm":x}, dataType: "json", success: function(data, status){ alert(data.address1 + data.address2); }, error: function(XMLHttpRequest, status, errorThrown){ alert("エラーが発生しました!"); } }); } 以下category.php if(!$_POST) header("Location: input.php"); $CATEGORY2 = array( 1 =>array( 1 => "a", 2 => "b", 3 => "c", ), 2 => array( 1 => "d", 2 => "e", 3 => "f", ), 3 => array( 1 => "g", 2 => "h", 3 => "i", ), ); $ary = array(); if($_POST["prm"]){ for($i=1;$i<=3;$i++){ foreach($CATEGORY2[$i] as $key => $value){ if($key == $_POST["prm"]) $ary = $CATEGORY2[$i]; } } } json_encode($ary); としています。 PHPにPOSTしたデータも確認できないし jsonデータを表示できないです。 どのようにしたらいいかわかりません。 ajax初心者でわからないことだらけです。 教えてください。

    • ベストアンサー
    • AJAX
  • PHP+Ajaxでプルダウンの連動

    お世話になっております。久しぶりですが、わからないところが出てきたので、質問させてくださいませ。 現在、PHP+MySQLでホームページを作っています。 A(大カテゴリ)、B(小カテゴリ)のそれぞれのプルダウンを持っていて、 MySQL上では、BはどのAに所属しているかが格納されています。 その上で、 PHPソース <script type="text/javascript" src="ajax.js"></script> Aの部分 <select name="category" id="category" onChange="changePack(this)"> <option value="">--</option> <option value="1">A-1</option> <option value="2">A-2</option> <option value="3">A-3</option> </select> Bの部分 <select name="pack" id="pack"> <option value="">--</option> </select> Ajax部分のソース // 検索結果画面初期表示用 function setList() { var Category = "0"; var Pack = "0"; setPackOption(Category); document.rsv_input.category.selectedIndex = 0; document.rsv_input.pack.selectedIndex = 0; } // カテゴリ選択時 function changePack(Category) { var Category; getResult(Category.value); } function getResult(Category) { //XMLHttpRequestオブジェクト生成 var xmlhttp = createHttpRequest(); if (xmlhttp == null) { return null; } var data = ""; data += "category=" + Category; sendRequest(xmlhttp, "POST", "result.php", false, data, callBack); } function callBack(xmlhttp) { var result = xmlhttp.responseText; var resArray = result.split(","); for (i=0; i<resArray.length; i++) { var packArray = resArray[i].split("/"); document.rsv_input.pack.options[i] = new Option(packArray[1], packArray[0]); } } relust.phpのソース $category = ( $_POST["category"] != "0" )? $_POST["category"] : ''; select文で「$category」を持つ、レコードから「小カテゴリ」のid、名称 を取得 $id = $Cols['id']; $name = $Cols['name']; $data .= ',' . $id . '/' . $name; echo($data); としておりますが、小カテゴリのプルダウンに$dataの中身が反映されません。(result.phpの$_POSTを$_GETに変更して単体で動かした場合は、$dataが読み取れる状態になります。) http://www.okushin.co.jp/information/Ajax_report/06_sample02.php を参考にさせていただいていますが、プルダウンの総数が違う。や、最終結果をテキストデータとしてhtml中に書き出すなど若干の相違点でつまずいています。 当方、PHP(0.5年)、JavaScript(0.5年)位の経験しか持ち合わせていないので、余計にわかってないだけかも知れません。 お手数をおかけいたしますが、修正箇所の指摘やその方法などを教えていただけませんでしょうか。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Ajaxで作成したinputタグが正しく動作しない

    元々htmlで作成してあるform内容をAjaxで送受信し、 その得られたjsonデータを元に新規にテーブルを作成しています。 ここまでは出来ているのですが、更にこのテーブルにそれぞれの項目にソートボタンを実装したいのですが、これが実現しません。 <input type="button"で作成したボタン(元のhtmlにあるボタンと同様の記述)は元ページのphpに遷移してしまい、 <button></button>で作成したボタンは何の動作も行いません。 元々ある検索ボタンと同様に非同期でpostするには 追加で作成したform内の要素はどのようにすれば可能でしょうか? //テーブル作成関数 function create_table(data){ //テーブルヘッダー var text = "<table><thead><tr><th>foo</th><th></th>"; $("li", "#foo_list").each(function(i, v){ text += "<th>" + v.innerHTML + "\      //●inputボタン作成部 <input type='button' class='search_btn' value='検索' />\ <button class='search_btn' value='" + v.id + "_up' ><img src='./foo.gif'></button>\ <button class='search_btn' value='" + v.id + "_down' ><img src='./bar.gif'></button></th>"; }); text += "</tr></thead><tbody>"; ~省略~ //テーブル閉じる text += "</tbody></table>"; $("#result_table").html(text); } //ajax送受信 $(function(){ var jsdata = ""; $('.search_btn').click(function(){ var form = $("#frm"); var json = $(form.serializeArray());   $.ajax({ url : "./hoge.php", type : "post", data : json, success: function (jsdata){ results_data = eval( "(" + jsdata + ")" ); create_table(results_data); } }); }); }); よろしくお願いいたします。

  • jquery PHP 値 ajax

    失礼します。現在jqueryで作成した2次元配列をPHP側に渡したいのですが上手くいきません。 jquery側のコンソールで確認した際にはsuccessの処理が行われ配列の中身がjson形式で表示されるのですが、その内容をPHP側で確認しようとするとNULLが返ってきてしまいます。 何卒ご教授よろしくお願いいたします。 html側 $(function(){ // 送るデータ形式はJSONでなければ、PHP側でエラーが出る.のでJSON.stringify()でJSON形式に変換 send_data= JSON.stringify(data); // 送信処理 $.ajax({ url: "ajax.php", // 送信先のPHP type: "POST", // POSTで送る contentType: "Content-Type: application/json; charset=UTF-8", //必須ではなさそうだが、サーバ側との整合のために明示しておいた方がよい。 // dataType: 'json', //受信形式 必須ではなさそうだがサーバ側との整合のために明示しておいた方がよい。 data:send_data //JSON形式の送信データ }).success(function(data, status, xhr) { // 通信成功時の処理 console.log("success"); console.log("data ="+data); console.log("status ="+status); console.log("xhr ="+xhr); }).error(function(xhr, status, error) { // 通信失敗時の処理 console.log("error"); }).complete(function(xhr, status) { // 通信完了時の処理 console.log("fin"); }); }) }) PHP側 二通り試してみました。 <?php //php://inputはPOSTの生データを取得できる $json = file_get_contents("php://input"); //JSON形式データをPHPの配列型に変換 $data = json_decode($json); var_dump($data) ; //POSTできたデータを格納 $hoge = $_POST['data']; var_dump($hoge);

    • ベストアンサー
    • AJAX
  • ajaxにより取得したxmlデータの加工について

    ajax通信でRSSのxmlデータを取得し、一部のタグを抽出してhtml上にリンク一覧を作りたく、以下のような処理をテストで作りました。 $(function() { $.ajax({ url: '取得対象のxmlファイルパス', type: 'GET', success: function(data) { //var json = $.xml2json(data); $(data)find('title').each(function(){ console.log($(this).text()); }); } }); }); コンソールにはすべて空データしか確認できないのですが、取得したdataを変換等する必要がありますでしょうか。

  • Ajaxがおかしいんです

    Javascript初級者です。 Ajaxを使ってデータの重複チェックを行おうとしました。 ところがAjaxがヘンな動きをするんです。 以下のコードなんですが、上の登録処理の中で、function doubleCheck を呼んで います。 問題は2つあって、ひとつは実際に重複していてもしていなくても「true」を 返してくることです。 console.log("res=========" + res) には「yes」とか「no」とか重複有り無しで 異なりますが、ちゃんとそれぞれセットするにも関わらず、 if(!doubleCheck() では必ず「false」が戻ってきてしまいます。 もう一つおかしい点は、重複検索(これはPHPでやってます)の最中にもかかわらず、 「true」が返ってきて "重複があったので登録できません。" お、出てしまうことです。 それで調査するために console.logその2を入れてみました(※※※のところ)。 ところがこの console 何も吐き出しません。 ということは doubleCheck() の最後の if文にたどり着いていない、または 途中でエラーになっているのかもしれません。 私の書いた Ajax のコードがおかしいんでしょうか。 どなたか御指導下さい。 よろしくお願いします。 // 追加登録処理 function doActionAdd(){ if(dataCheck()){ // customerId が 空白か否かのチェック if($('#customerId').val() == ""){ if(window.confirm("追加登録していいですか?")){ if(!doubleCheck()){ window.alert("重複はありませんでした"); }else{ window.alert("重複があったので登録できません。"); }  (以下略) function doubleCheck(){ var yomi = $('#customerYomi').val(); var res = ''; // 重複チェック $.ajax({ type: "POST", url: "../customer/CustomerDoubleCheck.php", data: {"customerYomi":yomi}, dataType: 'text', // ajax通信が成功したときの処理 success: function(request){ console.log("request=========" + request); var json = JSON.parse(request); console.log(json[0].result ); res = json[0].result; console.log("res=========" + res); }, error: function(XMLHttpRequest, textStatus, errorThrown){ $('div#jobStatus').text("重複チェック検索ができませんでした。"); return false; } }); console.log("resその2=========" + res); //※※※ if(res == "yes"){ // 重複していたので「false」を返す。 return false; }else{ // 重複していなかったので「true」を返す。 return true; } }

  • PHP,MYSQLで検索が出来ません。sjis→ euc→sjis。

    apache 1.3.34 mysql 4.0.26 php 4.4.2 で運用しています。 HTML 入力 sjis → DATA sjis →読み出し sjis で運用していたのですが、文字化けのおかげで データを EUC にしました。 HTML(入力)sjis→EUC→HTML(読み出し)sjis に変更しました。 参考書を頼りに、変換しながらやっているのですが データが漢字(ひらがなも同じかも)の場合に検索が出来ません **他はうまくいっています***入力、表示ともに 入力時 function cnv_dbstr($string) { $string = htmlspecialchars($string); $string = mb_convert_encoding($string, "EUC-JP", "SJIS"); if (!get_magic_quotes_gpc()) { $string = addslashes($string); } return $string; } 出力時 function cnv_dispstr($string) { $string = mb_convert_encoding($string, "SJIS", "EUC-JP"); $string =nl2br($string); return $string; } 今までは下記のsqlで出来ていたのですが、この福岡市を cnv_dbstr(福岡市) にしてみたりしたのですが検索が出来なくて データが出てきません。 $sql = "select * from mem where area = 1 and cate = '福岡市'" ; $rst = mysql_query($sql, $con); どなたか、アドバイス宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • Jquery.ajaxでHTML読み込み

    現在、Jquery.ajaxを使って外部HTMLの読み込み処理を行い、処理完了後にフェードで表示させるということをしているのですが、読み込んだHTMLに貼り付けてある画像が読み込まれる前にHTMLが表示されてしまい、困っています。 Jquery.ajaxでは内包されている画像の監視まではできないのでしょうか? 下記が今作っているコードです。 $contest.css({ "opacity": 0 }); $.ajax({ type: "GET", url: "hoge.html" dataType: "html", success: function(data) { $contest.html($(data).find("#hoge")); }, complete: function() { $contest.stop().animate({ "opacity": 1 }, 1000, "easeOutCubic"); } }); おわかりになる方、ご教授お願いします。

  • 一部環境でAjaxのHTMLデータ書き換えに不具合

    Ajaxを使用し、HTMLページ内のデータを書き換える処理をしているのですが、iPhone7のsafariだとどうしても口コミデータの表示部分がうまく動きません(※大半のChrome及びiphone6、androidは動作確認ずみ)。問題がどこにあるのかが全く分からず、頭を悩ませています。何か要因となるものや解決策が少しでもわかれば大変助かります。 ご助力の程、何卒よろしくお願い致します。 以下コードを抜粋したものです。 処理1 <script src="../js/rank_2016.js"></script> …etc… <p class="reviewOldShowBtn">以前の口コミデータ表示(<span class="reviewOldCntEle">19</span>件)</p> …etc… (2)../js/rank_2016.js …etc… document.write('<script type="text/javascript" src="XX/php/js/rankReviewPager.js"></script>'); …etc… $(document).ready(function(){  …etc… }) (3)XX/php/js/rankReviewPager.js function listDo(hoge) {  $.ajax({ type: "POST", dataType: 'json', url: 'XX', async: true, //非同期処理      data:{inp:{ a1:hoge }}  }).success(function( data ) {   var obj = data.list;   …etc…   ※ここで実際に以前の口コミを表示する処理を実行   $(".reviewEle" ,elePa ).first().before( '<span>' + obj + '</span>' );   …etc…  }); } jQuery(function(){    //過去の口コミ表示ボタンを押したときのイベント $("#rankEle").on("click", ".reviewOldShowBtn", function(){      ※ここでAjaxを実行 listDo('aaa');   }); } ーーここまでーー

    • ベストアンサー
    • AJAX

専門家に質問してみよう