【質問内容】
表題の件を達成したかったのですが調査を進めた結果、変数そのものを渡すことは出来ないということが分かりました。
そこで代替案として「Ajaxを使用してPOSTで値を渡したい」のですがうまくいきません。
初心者で大変申し訳ありませんがご教授頂けないでしょうか。
よろしくお願い致します。
・ローカルサーバーはXAMPPを使用しています。
・コンソールに「Ajax_success」と出るのでAjaxは動いているのではないかと思います。。
・InAppBrowserでWebページに飛びます(APIを想定してはいません)←修正依頼を対応しました。
【monacaアプリのindex.html】
javascript
1$.ajax({ 2 type: "POST", 3 url: 'http://192.157.13.5/testajax.php', 4 data: { 5 'test': 2 6 }, 7 success: function(j_data){ 8 console.log("Ajax_success!!");//成功していたらコンソールに文字列を表示する 9 } 10}); 11//ページ遷移 12var ref = cordova.InAppBrowser.open('http://192.157.13.5/testajax.php');//ローカルサーバーのtestajax.phpに飛ぶ
【ローカルサーバーのtestajax.php】
PHP
1$data = $_POST['test']; 2echo $data;
【エラー内容】
Notice: Undefined index:test
【まとめ】
「Ajaxを使用してPOSTで値を渡す」ことは「InAppBrowser」を使用する場合出来ないということが分かりました。
そこで他の方法として「GETで値を渡す」方法を試したところうまくいきました。
【monacaアプリのindex.html】
2次元配列を「GET」で渡して「ローカルサーバー」に飛ぶ処理
javascript
1//2次元配列の作成 2var sendData = new Array(); 3sendData[0] = new Array(); 4sendData[1] = new Array(); 5sendData[2] = new Array(); 6 7//2次元配列にテストデータを入れる 8sendData[0][0] = "key0"; 9sendData[1][0] = "key1"; 10sendData[2][0] = "key2"; 11 12sendData[0][1] = "a"; 13sendData[1][1] = "b"; 14sendData[2][1] = "c"; 15 16//console.log("what is sendData:"+sendData); 17 18//配列をJSONオブジェクト化 19var json_obj = JSON.stringify(sendData); 20//console.log("what is json_obj"+json_obj); 21 22//ページ遷移 23cordova.InAppBrowser.open( 'http://192.157.13.5/testajax.php?data=' + encodeURIComponent( json_obj ),'clearcache=yes','clearsessioncache=yes' );//ローカルサーバーのtestajax.phpにGETで配列の情報を付けて飛ぶ 24
【ローカルサーバーのtestajax.php】
GETで受け取ったURIからデータを取得し配列に入れる処理。(渡したい値を再設定する処理)
「decodeURIComponent」してから「JSON.parse」で配列にしています。
javascript
1<script type="text/javascript" charset="UTF-8"> 2 3var decode_obj =""; 4//2次元配列の作成 5var getData = new Array(); 6getData[0] = new Array(); 7getData[1] = new Array(); 8getData[2] = new Array(); 9 10 11 12if (1 < window.location.search.length) { 13 // 最初の6文字 (?data=) を除いた文字列を取得する 14 //monaca index.htmlのencodeURIComponent( json_obj ) と queryが同一文字列となる 15 16 var query = window.location.search.substring(6);//JSONオブジェクト化した2次元配列をエンコードしたものと同じもの 17 //document.write("what is query:"+query+"<br>"); 18 19 decode_obj = decodeURIComponent( query );//JSONオブジェクト化した2次元配列 20 //document.write("what is decode_obj:"+decode_obj+"<br>"); 21 22 getData = JSON.parse( decode_obj );//2次元配列 23 //document.write("what is getData:"+getData+"<br>"); 24} 25</script> 26 27
【追記2】
XAMPPを使った環境の場合、GETメソッドで大量にデータを送信するとエラーが出て送信できないことがあります。
これは「LimitRequestLine」をいじることで回避できます。
LimitRequestLineについて
試しに「LimitRequestLine」の値を100000にしてみましたが、問題なく動作しました。
(あまり値が大きくなりすぎるとセキュリティ的によくないと思いますので、許容できる範囲がいいのではないかと思います。)
回答4件
あなたの回答
tips
プレビュー