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

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

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

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ajax

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

Q&A

2回答

4439閲覧

ajaxのエラーについて

CrossHorn

総合スコア12

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ajax

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

0グッド

0クリップ

投稿2017/05/10 03:48

編集2022/01/12 10:55

お世話になります。

ajax通信に関して

$.ajax({
url: url,
type: 'post',
data: postData,
dataType: 'json',
cache: false,
oauth: 'signed',
success: function(data, status) {
// 成功時の処理
},
error: function(xhr, status, e) {
// 失敗時の処理
}
});

上記のような、ajax通信の処理を使用し、
スマートフォンにてウェブブラウザ上より
サーバーへ通信を行った際に失敗し、
[ xhr ]のstatusに [ 0 ]が格納されて
返ってくる場合というのは、どのような原因が
考えられますでしょうか。

status 0 に関して調べた所
クロスオリジン関連する記載がいくつか見られたので
サーバー側には

[ Header set Access-Control-Allow-Origin "*" ]

上記ヘッダを追加済みなのですが。

サーバーに関しては、
AmazonEC2インスタンスを使用しています。
( Linuxは 「 Amazon Linux AMI 」を使用しています )
ヘッダの追加以外にサーバー側にて設定等必要なもの等
存在しますでしょうか。

恐れ入りますが、ご教示の程よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

スマートフォンにてウェブブラウザ上よりサーバーへ通信を行った際に失敗し

上記文章からは、「スマートフォン」の時はダメ ⇒ PC 用の IE, Chrome, Firefox などの最新版を使った時は成功する・・・というように読めるのですが、そうなのでしょうか?

そして、

サーバー側には [ Header set Access-Control-Allow-Origin "*" ] 上記ヘッダを追加済みなのですが。

ということはクロスドメインなのですよね?

上記の想像が当たっているとすると、「スマートフォン」のブラウザが Cross-Origin Resource Sharing (CORS) をサポートしていないということが疑わしいのですが、そのあたりは確認されているでしょうか?

PC 用の IE, Chrome, Firefox などの最新版でもダメということで、かつクロスドメインということであれば、サーバー側での CORS 対応(適切なヘッダを返す)がうまくいってないということが疑わしいと思います。

特に、要求が「シンプルなリクエスト」にならない場合は、CORS をサポートしているブラウザからは実際のリクエストを送信しても安全かを確かめるための「プリフライトリクエスト(詳しくは以下の記事を見てください)」が事前に行われます。そのあたりはいかがでしょう?

クロスドメインの WCF サービス
http://surferonwww.info/BlogEngine/post/2016/12/27/wcf-service-in-cross-domain.aspx

上の記事のように Fiddler などのキャプチャツールを使って要求・応答を調べてみてはいかがですか?

どのような要求が「シンプルなリクエスト」になる条件は、以下の記事を読んでください。

HTTP アクセス制御 (CORS)
https://developer.mozilla.org/ja/docs/Web/HTTP/HTTP_access_control

投稿2017/05/10 05:10

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

CrossHorn

2017/05/10 08:17

ご返答ありがとうございます >上記文章からは、「スマートフォン」の時はダメ ⇒ PC 用の IE, Chrome, Firefox などの最新版を使った時は成功する・・・ >というように読めるのですが、そうなのでしょうか? サーバー側に[ Header set Access-Control-Allow-Origin "*" ]の追加を行う前に関しては PC用のブラウザ上等でも ajax 通信時にクロスドメイン関連のエラーが発生した為、 サーバー側に設定を追加後は問題無く通信等が行える様なったので、 サーバー側でのクロスドメイン対策に関する設定は問題ないのではと思っています。 (上記ヘッダを追加前は、スマートフォンでも同様にエラーが発生していました) スマートフォンからのajax通信時に [ xhr ]のstatus に[ 0 ]が格納されて返ってくるのは、 必ず起きるというわけではなく、正常に通信が成功する場合もあります。 同じスマートフォン端末を使用してる際に、通信が正常に成功する場合と 上記の様にstatusに[ 0 ]が格納されて返ってくる時があるという状態です。
退会済みユーザー

退会済みユーザー

2017/05/10 09:00

> スマートフォンからのajax通信時に [ xhr ]のstatus に[ 0 ]が格納されて返ってくるのは、必ず起きるというわけではなく、正常に通信が成功する場合もあります。 そういうことですと私には見当がつきません。 jqXHR.status で 0 が返ってくるのは HTTP status code を返せない場合だそうで、それからピンポイントで原因を見つけるのは難しそうです。 以下の記事が信用できると思っています。 Does an HTTP Status code of 0 have any meaning? http://stackoverflow.com/questions/3825581/does-an-http-status-code-of-0-have-any-meaning その記事に書いてありますが、要するに "there's no real HTTP response code available to report, either because you haven't sent the request, you explicitly aborted it, the page is unloading, or x went wrong for one of many possible values of x" ということだそうです。
guest

0

error: functionで
console.log(status)でなにが戻ってきていますか?
あとはブラウザの開発ツールでpostデータのやり取りが
どうなっているか確認すればある程度わかると思います。

またパースエラーが発生している場合は
dataType: 'json'を'text'に変えてデバッグするのをお勧めします

投稿2017/05/10 05:00

yambejp

総合スコア114581

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

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

CrossHorn

2017/05/10 08:31

ご返答ありがとうございます >error: functionで >console.log(status)でなにが戻ってきていますか? error: function(xhr, status, e) { の [ status ]に関しては [ error ]という文字が返って来ているようです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問