質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

3回答

2682閲覧

ajax のクロスドメイン問題の解決策について

it_solution_lab

総合スコア71

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

2クリップ

投稿2015/02/17 01:33

sqlのサーバーがindex.html のあるサーバーと異なるため
(実際にはandroidの中にindex.htmlを組み込む)

他ドメインのsqlからデータを参照してきて、結果を取得したい

呼び出し用javascript

function ajaxGetMyMsg(param1,param2,param3) {
var target = document.createElement('script');
target.charset = 'utf-8';
target.src = '他ドメインのphpのurl/get.php?key=param1&MyId=param2&ToId=param3&callback=callbackFunc"; //(1)
document.body.appendChild(target);
mymsg = data; //(2)
}

function callbackFunc(result) {
console.log(result);
}

呼ばれた他ドメインのphp

最終行に

echo "callbackFunc({"data": "返り値"})";

これを記述

同php を単体で(1)のget.php をパラメータ付きで呼び出した場合

callbackFunc({data:結果})

で希望する結果を表示できることは確認済み

同一サーバー上のindex.html と php であれば

function ajaxGetMyMsg(param1,param2, param3){
$.post("get.php",
{key:param1,MyId:param2,ToId:param3},function(data,status) {
mymsg = data;
});
}

で結果は変数 mymsg に代入されていました。

どのように記述すればよいのかご助言お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

いろいろありがとうございました。
教えていただいた方法ではありませんでしたが、
なんとか、別ドメインのサーバーから値を取得し、
表示する方法を実現できました。

投稿2015/02/17 09:23

it_solution_lab

総合スコア71

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PHPに

lang

1header("Access-Control-Allow-Origin: *");

を書けばいけそうな気がします。

投稿2015/02/17 07:10

tsunet111

総合スコア59

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

サーバサイドでAccess-Control-Allow-Originを設定するか、JSONPを利用することで可能です。

投稿2015/02/17 01:52

sho_cs

総合スコア3541

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

it_solution_lab

2015/02/17 02:16

サーバー側とは?どちらでしょうか? 呼び出す側、呼び出される側? 呼び出す側は、最終的にandroidの中にソースとして入れますので、 そこの部分は無理では?と思いますが、 JSONPを利用する、というのは、呼び出す側、呼び出される側、いずれも なんら設定することなく、プログラムの記述でよい、ということでしょうか? 申し訳ありませんがその辺、初心者ですので、 具体的な記述例をお願いできれば、と思います。
it_solution_lab

2015/02/17 05:05

いろいろありがとうございます。 そのお知らせいただいた参考になるサイトのjavascript版での記述に乗っ取って 書いたつもりで、うまく結果が取得できないので、 質問にいたったのです。
it_solution_lab

2015/02/17 05:06

search.json というのは決まり文句でしょうか? phpなどの外部プログラムのurlでよいのでしょうか?
sho_cs

2015/02/17 05:34

search.jsonはただの例です。 確かに質問で書かれているコードは概ね正しそうですね。ちょっと見てみます。
it_solution_lab

2015/02/17 05:38

もともとの質問のcallbackFunc のresult に値が入っていて これを変数に代入すればいいとか、ではないですよね
sho_cs

2015/02/17 05:47

callbackFunc のresult に値が入って来るはずです。
it_solution_lab

2015/02/17 05:47

<html> <head> <title>jsonp test</title> <meta charset="utf-8"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script> var key = "key"; var myid = "myid"; var toid = "toid"; </script> </head> <body> <a href="#" onClick="a();">データ取得</a> <br/> <br/> <div id="msg"></div> <script type="text/javascript"> function a() { var src = '別ドメインの/get.php&key='+key+'&MyId='+myid+'&ToId='+toid; //確認URL表示 alert('src='+src); $.ajax({ url: src, type: 'GET', dataType: 'jsonp', jsonp: "callback", timeout: 10000, success: function(data) { alert('success'); console.log("SUCCESS"); $("#msg").append(data.title + "<br/>"); $("#msg").append(data.entry_url); }, error: function(data) { alert('error'); console.log("ERROR"); }, complete: function(data) { alert('complete'); console.log("COMPLETE"); } }); } </script> </body> </html> これでやってみると、error が alertで表示されます。 php側で何を返せばいいのかも良くわからない状態です。
sho_cs

2015/02/17 06:17

ある程度環境は省略しましたが、レスポンスが[callbackFunc({"data":"結果"})]の場合、一番最初に書かれた 呼び出し用javascript のcallbackFunc内で正常に値を取得出来ました。
sho_cs

2015/02/17 06:44

上のコードではerrorのfunctionの引数の指定に誤りがあるためerror が alertで表示されています。 正しくは以下のように書きます。 error: function(XMLHttpRequest, textStatus, errorThrown) { $("#XMLHttpRequest").html("XMLHttpRequest : " + XMLHttpRequest.status); $("#textStatus").html("textStatus : " + textStatus); }
it_solution_lab

2015/02/17 06:56

callbackfunc内で正しい値が取得できた、ということは ここの部分で、mymsg = result ;とすれば グローバル変数に値が代入される、ということでしょうか?
it_solution_lab

2015/02/17 06:57

取得したいのは、変数名など含まない、単なるテキスト文字列(日本語含む)です。 これを mymsg の変数値としてセットしたいのです
sho_cs

2015/02/17 06:59

コンソールに出力されたのでcallbackfunc内でmymsg = result ;でいけると思います。
sho_cs

2015/02/17 07:05

通常のjavascriptのオブジェクトの扱いと同じです。 mymsg = result.data ; JSONの扱いやajax、JSONPの仕組みなどよく調べられたほうがいいと思います。
it_solution_lab

2015/02/17 08:04

呼び出し側で mymsg = result; mymsg = result.data; いずれも結果が得られませんでした。 また、php側に header("Access-Control-Allow-Origin: *"); をつけても header('Content-type: text/javascript; charset=utf-8'); というのをつけても 値を得ることは出来ませんでした。 PHPが呼ばれていることは確認済みです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問