javascript - JSONPを使用したクロスドメインのjQuery $ .ajax呼び出しはステータス200を返しますが、成功の代わりにエラー関数が呼び出されています

原文 javascript jquery ajax json

私のWebアプリケーションは、別のドメインに属する別のサーバーからの情報にアクセスしようとしています。クロスドメインのajax呼び出しなので、JSONの代わりに「dataType」を「JSONP」として使用しました。

WebInspector-> Networkタブで、リクエストが成功し、レスポンスが入力されていることがわかります。しかし、success()関数が呼び出されることはありません。常にstatus = 200でエラー関数を呼び出します。

JSONPリクエストなので、jQueryは「callback =?」を追加します有効な応答を受け取った後でも、URLの最後までコールバックメソッドが呼び出されたことはありません。何が悪かったのかわかりませんか?

$(document).ready(function() {
    // When you click the Get Instances button:
    $('#getInstances').click(function(){
        $.ajax({
            type: "GET",
            url: "http://178.28.167.221:8080/us-east-1/instance/list.json",
            contentType: "application/json; charset=utf-8",
            accept: "application/json",
            crossDomain: "true",
            headers: {'Access-Control-Allow-Origin','*'},
            dataType: "jsonp",
            success: function(msg) {
                result = JSON.stringify(msg);
                var obj = $.parseJSON(result);
                console.log(obj);
                $('#instancesTable').append('<tr><td>' + obj.autoScalingGroupName + '</td><td>' + obj.amiId + '</td><td>' + obj.instanceId + '</td><td>' + obj.instanceType +'</td></tr>');                                     
            },
            error: function(xhr, ajaxOptions, thrownError, textStatus, responseText) {
                console.log(name + ' environment failed with error: ' + xhr.status + "  " + thrownError);

                var errorMessage = "Error";
                if (xhr.status == 0) {
                    errorMessage = "Can't Connect";
                }
            }
        });
    });
});


私はまた、私のajaxリクエストに以下を含めることによって確認しました:

        jsonp: 'callback',
        jsonpCallback: 'jsonpCallback'


そして以下のようにコールバック関数を定義します:

       function jsonpCallback(data){
         alert("jsonpCallback");
       }


リクエストが成功し、サーバーからの応答が利用可能であっても、jsonCallbackは呼び出されませんでした(WebInspectorの[ネットワーク]タブに表示されます)。

サーバーからの応答はJSONオブジェクトの配列です。 [{JSON1}、{JSON2} ..]

注:応答がJSONオブジェクトの配列だったため、contentTypeを "application / javascript"に変更しようとしました。しかし、何もうまくいきませんでした:(
答え
同様の問題があり、解決しました。
サービスが何であるかを指定していません。
私の場合、それはWCFサービスでした。

これを追加する必要がありました。

   <webHttpBinding>
        <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
      </webHttpBinding>


サービスのバインディング構成を上記に設定します

つまり、bindingConfiguration="webHttpBindingWithJsonP"

これで問題は解決しました。これらは、PHPまたは他のプラットフォームで同じことを達成するための同様の手段である可能性があります
関連記事

javascript - 配列へのテーブルのローカルストレージ

javascript - Parse JS APIで新しいユーザーを作成しようとしたときの最大コールスタックエラー

javascript - Divはマウスを追跡し、ブラウザーの境界を避けます

javascript - Emberデータ:エラー時にcreateRecordをロールバックします

javascript - 複雑なデータとオートコンプリートに関するバインドの問題

javascript - Angular検索と結果ビューを切り替えてデータを渡す方法

javascript - RubyコードでJqueryを介してクリックをトリガーする

javascript - 内部のng-transcludeからのAngularJS親ディレクティブスコープ

javascript - 移行が機能しない

javascript - JavaScriptキャンバスタグとストロークテキストメソッド