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

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

ただいまの
回答率

89.24%

ajaxを使用したPost送信で処理はうまくいくが、errorと判定されてしまう。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,000

HelloWorld2

score 24

処理概要

  • ユーザが、ページ表示した時に、json形式のデータをPost送信します。
  • 送信先はAzureのFunctions(受け取ったデータを処理して別の場所に書き込む、戻り値のない処理、本質問ではあまり関係ないと思います)
  • データ送信を行っていることは、ユーザにはわからないようにしたいです(画面遷移などはしません)

現状

  • 他のサイトを参考に、ソースを作成しました。
  • 上記処理は満たしています。(Post送信でjson形式のデータをFunctionsに渡せています)

問題

  • 下記ソースでは、一時的に、成功した場合・失敗した場合にalertを表示させています。
  • 処理は想定通りにも関わらず、常に、error側の処理が実行されてしまいます。
  • alertの内容は下記の通りです。
ajax通信に失敗しました
XMLHttpRequest:0
textStatus:error
errorThrown:undefined

質問内容

  1. 下記コードのsuccess/errorは何をもって判別されているのでしょうか?
  2. エラーの出力内容はどういった意味なのでしょうか?
    (XMLHttpRequest.statusが0なら通信に失敗という意味らしいですが、失敗しているわけじゃないため謎です。)
  3. 何かコードに問題があるのでしょうか?
<body onload="testFunction();">
<script type="text/JavaScript">
    function testFunction(){

        var jsonData = {
            "name": "テスト!"
        };
        var functionsUrl = 'https://hogehoge';

        $.ajax({
            url: functionsUrl,
            type: 'post',
            dataType: 'json',
            data: JSON.stringify(jsonData),
            success : function(data) {
                alert("success");
                alert(JSON.stringify(data));
                $("#response").html(JSON.stringify(data));
            },
            error : function(XMLHttpRequest, textStatus, errorThrown) {
                alert("ajax通信に失敗しました");
                alert("XMLHttpRequest : " + XMLHttpRequest.status);
                alert("textStatus     : " + textStatus);
                alert("errorThrown    : " + errorThrown.message);
            }
        });
    }
</script>

知識不足のため、質問等に不備がございましたら、
追記致しますので、よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • SurferOnWww

    2018/12/19 20:44

    Fiddler を使って要求・応答をキャプチャしてみると何か有用な情報が得られるかもしれません。

    キャンセル

回答 1

checkベストアンサー

+1

var functionsUrl = 'https://hogehoge';

クロスドメインの処理でしょうか?
開発ツール画面でエラーが確認できると思います

alertはやめてconsole.logを利用して下さい

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/25 12:31

    なるほど、サーバ側で設定追加するしか解決方法はないのですね。。。

    ちなみに、クロスドメイン制約に引っかかっているにも関わらず、
    データが送信される理由は何でしょうか?

    データが送信されてしまっているので、クロスドメイン制約って何のためにあるのでしょう・・・?という疑問が生じております。
    また、今後現在の環境と全く異なるWebサイトで、同様のscriptタグを埋め込む想定なのですが、実行クロスドメイン制約により、データが送信されなくなると困るので、上記疑問を解決したい次第でございます。
    (Webサーバの設定ができる環境とも限らないので)

    キャンセル

  • 2018/12/25 12:46

    > クロスドメイン制約に引っかかっているにも関わらず、
    > データが送信される理由は何でしょうか?

    サーバーというものは基本的に常に攻撃をされるものです
    サーバー側ではアクセスされたデータを検証し、必要に応じて
    アクセスの可否を判断するので
    ajaxのデータだけを防いでも意味がないからでしょうね

    httpヘッダなどどうしても制御出来ない場合はとりあえず
    jsonpでのアクセスをできるようapiを組んでみて下さい

    キャンセル

  • 2018/12/25 17:18

    ご丁寧にありがとうございました。
    とりあえずやってみます。

    キャンセル

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

  • ただいまの回答率 89.24%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る