• 締切済み

JQueryを用いたJsonとの非同期通信について

下のソース //画面構築完了後 $(function() { //ボタンのクリックイベントで $("#btn_1").click(function(){ //data/sample.jsonのデータを取得し、jsonというオブジェクトに入れる $.getJSON("fdas.json", function(json){ var rows = ""; //テーブルとして表示するため、htmlを構築 //for (i = 0; i < json.length; i++) { rows += "<tr>"; rows += "<td>"; for (var kaey in json) { rows += (json[kaey]); } rows += "</td>"; rows += "</tr>"; //} //テーブルに作成したhtmlを追加する $("#tbl").append(rows); }); }); }); このソースに <input id="btn_1" type="button" value="データ取得" /> を使ってボタンを押しているのですが、FirefoxだとJsonのデータを更新してから押してもデータが変更されず、ChromeだとF5とかを幼くても更新されます。 ブラウザによって挙動が違うのはソースが間違っているからですか? それともJsにもHTML5やCSS3のように、対応ブラウザなどがあるのでしょうか??? また自分はまだよくわかっていないのですが、prototype.jsを用いた場合のほうが簡単だということがありましたらそちらも教えていただけると幸いです 教えてください!!!

みんなの回答

  • gorusura
  • ベストアンサー率59% (25/42)
回答No.1

読み込んでるのはキャッシュです。(Firefoxの場合) 従って、http://blog.remora.cx/2011/10/trap-of-jquery-getjson.html こちらにも書かれている通り、 $("#btn_1").click({t:(new Date()).getTime()},function(){ //data/sample.jsonのデータを取得し、jsonというオブジェクトに入れる $.getJSON("fdas.json", function(json){ var rows = ""; //テーブルとして表示するため、htmlを構築 rows += "<tr><td>"; jQuery.each(json,function(key,value){ rows += value; }); rows += "</td></tr>"; //テーブルに作成したhtmlを追加する $("#tbl").append(rows); }); }); こんな感じで良いと思います。

関連するQ&A

  • コールバック関数が動かない

    Ajaxでサーバ通信を試みています。 Javaは少しわかるんですが、JvascriptやjQueryはサッパリちんぷんかんぷんな状態です。 今、ボタンクリックで「doAction()」を呼んで、Javaのクラス「/greetinglist」に キーワード「id」を渡して検索結果を受け取って表示しようとしています。 function doAction() は働いて、Java側の検索もできてるんですけど、そこで終了してしまいます。 コールバック関数「function callback(resp)」が動いてくれません。 FireBugで動きを追っていますが、特にエラーはないようです。 「function doAction()」 はjQueryを使っていますが、「function callback(resp)」はJavaScript だという認識です。 <script type="text/javascript" src="js/datastore.js"></script> <script src="/js/jquery-1.7.2.min.js"></script> <script type="text/javascript"> //<![CDATA[ function doAction(){ var id = $('#month').val(); console.log("id==========" + id); $.getJSON('/greetinglist',{id:id},callback,"json"); } function callback(resp){ var json = eval(request.responseText); var res = ''; for (var i = 0;i < json.length;i++){ res += '<td>' + json[i].month + '</td>' + '<td>' + json[i].tenDays + '</td>' + '<td>' + json[i].greeting + '</td>' + '<td><a href="greetingdetail.html?id=' + json[i].id + '">詳細</td>'; } var obj = document.getElementById("datatable"); obj.innerHTML ='<tr><td>id</td><td>月</td><td>旬</td><td>文章</td><td>編集</td></tr>' + res; console.log("res==========" + res); }

  • $.getJSONにJSON.stringifyを

    $.getJSONに、JSON.stringifyした結果を指定したいのですが、どうすればよいでしょうか? ■現状 ・コンソールにJSONは出力されているのですが、$.getJSONでこのファイルを指定しても、画面真っ白です ▼index.html <script type="text/javascript" src="hoge.json"></script> <script type="text/javascript"> $.getJSON('hoge.json', function(data) { ▼hoge.json var obj =([ [略], ]); var json_text = JSON.stringify(obj); // テスト出力 console.log(json_text); ■質問 ・$.getJSONにこの出力結果(json_text)を指定するためには、どうすれば良いでしょうか? ・一旦ファイル出力しなければいけないのでしょうか? ・どうやるのでしょうか? ・AJAXでサーバ側へデータを渡してファイル出力した後、$.getJSONでその出力したファイルを指定するしかない?

  • フォームからjQuery,jQuery.jsonを使ってJSONを作っ

    フォームからjQuery,jQuery.jsonを使ってJSONを作ってPHPで表示したい。 こんばんは。2、3日ずっと悩んでて解決しないので助けてください。 jQuery,jQuery.jsonを使ってJSONを作成しています。 クリックイベントに var form = $("#sform"); var json = $(form.serializeArray()); var strJson = $.toJSON(json); という形をとって $.ajax({ url : "request.php", type : "post", data : strJson, success: function(request){ $('#result').html(request); } }); で送っています。 ただPHP側で var_dump($_POST); を行ってもArray ( ) と表示されます。 firebugで見たところpostに入っているデータは以下の通りです。 {"0":{"name":"date","value":"2010/09/15"},"1":{"name":"type","value":"new"},"2":{"name":"bin[]","value":"2"},"3":{"name":"bin[]","value":"3"},"length":4} var_dumpで表示できないのはなぜでしょうか? 上記で変数json のまま送るとオブジェクトとして送れてvar_dump でも表示できます。 ただ今はjson の勉強をしているので、できればなぜこうなっているのかを理解したいです。 基本的なところで勉強不足かもしれませんが、何かアドバイスなど頂けると嬉しいです。 よろしくお願いします。

  • jQueryの$.getJSONでデータを渡したい

    jQueryの$.getJSONでデータを渡したいのですが、 うまくいきません。 test.js {  "users": [   {    "name": "aoki",    "code": "0001"   },   {    "name": "ueno",    "code": "0002"   }  ] } 読み込む側 $.getJSON("test.js", { "name": "John", "code": "0003" }, function(json){  alert("JSON Data: " + json.users[0].name);  alert("JSON Data: " + json.users[1].name);  alert("JSON Data: " + json.users[2].name); }); { "name": "John", "code": "0003" }を渡しているのだから、 json.users[2].nameで、"John"が取得できると思ったのですが、 「'users.2.name' は Null またはオブジェクトではありません。」エラーになります

  • チェックボックスの中味を送信できません

    昨日、Ajax通信で受け取ったデータをチェックボックスに反映する方法を教わった者です。 今度は送信で悩んでいます。 表のデータをPOSTで送るんですが、テキストのところ(「td」に書かれたものや input type="text" の部分) は問題なく渡せました。 でもまたまたチェックボックスでつまずいています。 ★☆★☆★☆★☆の部分ですが、プログラムは通るのですが、チェックボックスの内容(チェックか否か)を 拾ってくれません。 また、rows[i].getElementByTagName("sendF[]") などとやってみたんですが、エラー(not a function)が出てしまいます。 どなたかご指導下さい。 よろしくお願いします。 $.ajax({ type: "POST", url: "../SendList.php", data: {"condition":condition}, // Webサーバに送信するデータ dataType: 'text', // Webサーバか受信するデータの形式 success: function(request){ // ajax通信が成功したときの処理 var json = JSON.parse(request); var res = ''; for (var i = 0; i < json.length; i++){ res += '<tr>' + '<td style="text-align: center;">' + json[i].personId + '</td>' + '<td style="text-align: center;">' + json[i].personName + '</td>' + '<td style="text-align: center;">'; // 値を checkbox のチェックに差し込む if(json[i].sendF == 1){ res += '<input type="checkbox" id="sendF[' + i + ']" name="sendF[]" checked />'; } else { res += '<input type="checkbox" id="sendF[' + i + ']" name="sendF[]" />'; } res += '</td >' + '<td style="text-align: left;">' + '<input type="text" id="memo" name="memo" value="' + json[i].memo + '" />' + '</td >' + '</tr>'; } var obj = document.getElementById("datatable"); obj.innerHTML ='<table id="tbl_correspondUpdate" class="customerlist"><tr><th>担当者ID</th><th>担当者名</th><th>送信F</th><th>メモ</th></tr>' + res + '</table>' + '<br />' +'<p class="condition_submit">' + '<input id="btnUpdate" type="button" onclick="doActionUpdate();" value="更新" />' + '</p>'; }, error: function(msg){ // ajax通信が失敗したときの処理 alert( "Data Saved: " + msg ); } }); } // 「更新」ボタンクリック function doActionUpdate(){ var tbl = document.getElementById("tbl_correspondUpdate"); var cols = tbl.rows[0].cells.length;// 列数 //var rows = tbl.rows.length; // 行数 var rows = tbl.rows; // 行に対するループ for (var i=1; i<rows.length; i++) { var sendF; if(rows[i].cells[6].checked){ ★☆★☆★☆★☆// → 通るものの拾わない //var elm = rows[i].getElementByTagName("sendF[]"); // → not a function //if(elm.checked){ sendF = 1; }else{ sendF = 0; } // dataセット var data = "personId=" + rows[i].cells[0].innerHTML + "&sendF=" + sendF + "&memo=" + rows[i].cells[3].firstChild.value updateRecord(data); } } // 更新処理 function updateRecord(data){ // 更新Ajax処理 // 更新したIDを返す $.ajax({ type: "POST",

  • jquery input 要素取得

    失礼します。現在テーブルに記載されているテキストとinputの要素を取得して配列に格納したいのですが、input要素を取得できません ソースコードはこちらです。ご教授いただけますでしょうか。宜しくお願い致します。 <table id="tbl"> <tr> <td>fdfasdf</td> <td>hfadhfh</td> <td><input type="number" name="number" min='0' max="30" value=""></td> </tr> <tr> <td>hfdaha</td> <td>hfdsahsa</td> <td><input type="number" name="number" min='0' max="30" value=""></td> </tr> </tbody> </table> <script> var data = []; var tr = $("table tr");//全行を取得 for(var i=0, l=tr.length; i<l;i++ ){ //行数分回す var nk = 0; var cells = tr.eq(i).children();//1行目のtrの子要素は取得 for(var j=0, m=cells.length; j < m; j++ ){ //子要素分のcell分回す 0 < cell if(typeof data[i] == "undefined"){ //typeof(型判定) data[i] = []; //data[0] } if(nk < 2){ data[i][j] = cells.eq(j).text();//i行目j列の文字列を取得 data[0][0] ++nk; } data[i][j] = cells.eq(j).val(); } } </script>

  • X-JSON

    X-JSONについて質問です。 最近、jsをはじめたばかりの素人ですが、prototype.jsをライブラリとして使用してみようと思っています。 しかし、JSONからX-JSONに乗り換えるところで詰まっています。 まず、「"X-JSON":~」と指定してとなっていますが、なんとなくそれっぽくやってみても動きません。 ローカルのX-JSON形式で書かれたテキストファイルを読み込んで、単にHTML化して表示したいだけなのですが、うまくいきません。 ネットで調べられる限りのサンプルソースをまねてみたつもりですが、上手くいきませんでした。 ・簡単に動くサンプルソースをお持ちの方 ・わかりやすい解説のページなどを教えていただける方 環境は・・・ WinXP SP2、IE6 SP2、prototype.js 1.4.0 になります。 出来れば、複数レコードのデータを下に一覧テーブルを生成できるようなものがあると助かります。 ぜひ、よろしくお願いいたします。

  • このJSONデータをjQueryでどう処理すれば?

    質問させてください。 JSONデータの扱い方に悩んでおります。 以下の2つのコードはここでは見にくいため次のサイトに載せておきます。 http://codepad.org/CSN6X94T http://codepad.org/aPiIzcOR data.json [ { "pk": 1, "model": "ac.ni", "fields": { "kamoku_alpha": "SUUGAKU", "kamoku": "数学", "hissu": 0, "kamoku_hira": "すうがく" } }, { "pk": 2, "model": "ac.ni", "fields": { "kamoku_alpha": "EIGO", "kamoku": "英語", "hissu": 0, "kamoku_hira": "えいご" } }, { "pk": 3, "model": "ac.ni", "fields": { "kamoku_alpha": "KOKUGO", "kamoku": "国語", "hissu": 1, "kamoku_hira": "こくご" } } ] のようなJSONデータがあります。 この中でそれぞれのfields内のkamoku、kamoku_hira、kamoku_alphaを取得したいと考えています。 jQueryにてどのように書けば宜しいのでしょうか? $(function(){ $.getJSON('./data.json', function(data){ $.each(data, function(){ $.each(data.filter, function(){ alert(this.kamoku); }); }); }); }); の型で考えたのですが良く分かりませんでした。 アドバイス頂けたら幸いです。 jQueryは1.11.1です。

  • jQueryが反映されません><

    jQueryとJavaScriptでToDoメモを作っています 下記のコードなのですが 削除ボタンが表示されないのとToDoリストがおかしな位置に来ます どうすればいいのでしょうか? <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <link rel="stylesheet"type="text/css"href="css/style.css"> <script> monaca.viewport({width: 340});     document.addEventListener("deviceready",onDeviceReady,false); function onDeviceReady() { document.addEventListener("backbutton", onBkbtn, false); } function onBkbtn() { location.href = "index.html"; } </script> </head> <body> <div data-role="page"> <div data-role="header"> <h1>CheckList</h1> </div> </center> <!--新規追加ボックス--> <center> <div id="new_div"> <input id="new_txt" type="text" value="" placeholder="ToDoを書き込んでください" style="width:270px" size="40"/> </center> <br> <div data-role="button" data-icon="plus" id="add_btn">追加</div> </div> <!--項目一覧--> <div id="items_div"></div> <div id="control_div"> <div data-role="button" data-icon="delete" id="done_btn">削除</div> </div> </div> <!--Android1.6対策--> <script src="gear5-0.3.js"></script> <script> //便利な関数の定義 function $(id) { return document.getElementById(id); } //変数の初期化 var todo_div = $("todo_div"); var db; var cbItems = [] ; //ドキュメント読み込み時のイベントを設定 window.onload = function() { if (window.openDatabase == undefined) { alert("WEB Databaseに対応していません!!") ; return } //データベースを開く db = window.openDatabase("todo.db", "1.0", "ToDo", 1024 * 1024); db.transaction(function(tr) { //テーブルがなければ作る var query = "CREATE TABLE IF NOT EXISTS todo_tbl(" + " todo_id INTEGER PRIMARY KEY, " + " memo TEXT NOT NULL " + ")"; tr.executeSql(query, [], loadItems); }); }; // アイテムの読み込み実行 function loadItems() { db.transaction(function(tr) { var query = "SELECT * FROM todo_tbl" ;   tr.executeSql(query, [] ,loadItems_onResult); }); } function loadItems_onResult(tr, rs) { //すべての子ノードを削除 while(items_div.hasChildNodes()){ items_div.removeChild(items_div.lastChild); } cbItems = []; //チェックボックスの作成 for (var i = 0; i < rs.rows.length; i++) { var row = rs.rows.item(i); var todo_id = row.todo_id; var memo = row.memo; //チェックボックスの追加 var cb = document.createElement("input"); cb.className = "large"; //CSSに対応させる cb.type = "checkbox"; cb.value = todo_id; cbItems.push(cb); var label = document.createElement("span"); label.innerHTML = memo; var line = document.createElement("div"); line.appendChild(cb); //チェックを追加 line.appendChild(label); //ラベルを追加 items_div.appendChild(line); //項目にlineを追加 } } //追加ボタンを押したときのイベント $("add_btn").onclick = function() { var text = $("new_txt").value; $("new_txt").value = ""; db.transaction(function(tr) { var query = "INSERT INTO todo_tbl(memo)VALUES(?)"; tr.executeSql(query,[text],loadItems); }); }; //削除を押した時のイベント $("done_btn").onclick = function() { db.transaction(function(tr) { for (var i in cbItems) { var cb = cbItems[i]; if(!cb.checked) continue; var query = "DELETE FROM todo_tbl WHERE todo_id=?"; tr.executeSql(query,[cb.value]); } },function(){ alert('削除失敗') },loadItems); }; </script> </body> </html>

  • jsonの取得方法について

    選択したラジオボタンによって、プルダウンの中身を変えたいです。 スクリプト書いてみましたが、学校のデータが取得できません。 ファイルは以下のような感じで、同じフォルダにあります。 どのようにすれば正しく動くのでしょうか? ご教示の程よろしくお願いいたします。 ・スクリプト $("input:radio[name='school']").change(function(){ $("#gakkou").empty().append("<option value=''>-選択-</option>"); var school = $(this).val(); $.getJSON("school.json", function(data){ for (var i = 1; i <= school.length; i++) { $('#gakkou').append('<option value="' + i + '">' + data[school[i]]+ '</option>'); } }); }); ・index.html <td id="school"> <input type="radio" value="中学" name="school"/> 中学   <input type="radio" value="高校" name="school" /> 高校   <input type="radio" value="大学" name="school" /> 大学 </td> 学校: <select id="gakkou"> <option value="">-選択-</option> </select> ・school.json {"中学":{"1":"ABC中学校", ~中略~ "100":"XYZ中学校"}, "高校":{"1":"ABC高等学校", ~中略~ "100":"XYZ高等学校"}, "大学":{"1":"ABC大学", ~中略~ "100":"XYZ大学"}}

専門家に質問してみよう