JQueryのajaxでステータスコードに0が返ってくる場合

久々のコーディングメモ♪
JQueryのajaxを使ってPHPの外部コードから値を取得するのにこんな感じのコードを書いてみた。

$("#test_btn").on("click",function(){
    var param = {"action": "getText"};
    $.ajax({
        type: "GET",
        url: "getText.php",
        data: param
    })
    .done(function(data){
        console.log(data);
    })
    .fail(function(data, textStatus, errorThrown){
        alert("通信エラーが発生しました。");
        console.log(data);
    });
});

呼び出されるgetText.phpのコードはたったこれだけ。ほんとは処理が入るけど簡略化してみた。


で、これがstatus=0、statusText=”error”を返すのですな。直前まで同じコードで通常に200が返ってきていたのだけとワケがわからずハマってしまった。。。
ローカル環境ではあるけどもちろんブラウザでアクセスしてちゃんと表示されることは確認済み。

readyState: 0
responseText: ""
status: 0
statusText: "error"

いろいろ調べてみてわかったのは、そもそもステータスでサーバは0を返さないので(404とか50xとかが返る)CrossOriginでブロックされたかURL間違いが濃厚。しかしどちらも当てはまらず。

最終的に分かったのはレスポンスが返ってくる前に表示されてるみたい。というわけで

$("#test_btn").on("click",function(){
    var param = {"action": "getText"};
    $.ajax({
        type: "GET",
        async: false,
        url: "getText.php",
        data: param
    })
    .done(function(data){
        console.log(data);
    })
    .fail(function(data, textStatus, errorThrown){
        alert("通信エラーが発生しました。");
        console.log(data);
    });
});

と以下を追加して

async: false,

非同期通信を同期通信にしたらちゃんと行けた。ロックされるので使いたくないけど。。。
これやるならtimeout入れないと。。。

This entry was posted in ソフトウェア開発. Bookmark the permalink.

2 Responses to JQueryのajaxでステータスコードに0が返ってくる場合

  1. レンレン says:

    別世界の文言が並んでます。。。

    • admin says:

      す、すいません。。。”(-“”-)”
      とりあえず忘れないようにメモ代わりなので虫してやってください(・_・;)

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください