2013-06-26 8 views
8

EmberJSがバックエンドAPIへのクロスドメインコールをしようとすると、同じサーバー上に2つのアプリケーションがあります。CORS - ドメイン上のオリジンを許可することによってJSONPを使用しないドメイン間AJAX

バックエンドAPIを設定して、特定の起源からのドメイン間のリクエストを許可しました。しかし、そのような設定でJSONPを使用しないようにする方法はありますか? $.ajaxは、クロスドメインリクエストが送信される前にブロックしています。そうでない場合は、JSフロントエンドのソースからリクエストを受け入れるために実装したCORSのポイントは何ですか?

EDIT

AJAX要求:

$.ajax({ 
    url: "api.lvh.me:3000/accounts/login", 
    data: cred, 
    type: "POST", 
    xhrFields: { 
     withCredentials: true 
    }, 
    success: function(response){ 
     alert('succeeded!'); 
     console.log(response); 
     alert(response); 
    }, 
    failure: function(message){ 
     alert("failed"); 
     console.log(message); 
     alert(message); 
    } 
}); 
+0

CORSの問題が発生しないように、単純に逆プロキシをバックエンドで使用しないでください。 編集:$ .ajaxがそれらの要求をブロックするとは思えません。サーバーに許可されているかどうかを問い合わせる必要があるからです。 – Coxer

+0

すべてのクロスオリジン要求をリバースプロキシで許可していませんか? – darksky

+1

$ .ajaxコールのurl属性に「http://」を付加してみましたか? – Ike

答えて

9

あなたはCORSを有効にした場合JSONPを使用する必要はありません。

Access-Control-Allow-Origin: http://www.example.com 

このヘッダは、応答して設定されている場合、通常のXMLHttpRequestが、それは同じドメインのようなものであるかのように応答にアクセスすることができるであろう。このヘッダが正しく設定されているかどうかを確認してください。任意のドメインでこれを試してみてください、あなたが応答を取得します 例

var xmlhttp= new XMLHttpRequest(); 
var url="https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control"; 
xmlhttp.open("GET",url,false); 
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
xmlhttp.send(); 

は、私はあなたがjqueryのにA CORS POST request works from plain javascript, but why not with jQuery?

アップデートを使用している場合は、このリンクはあなたを助けることを願っています。

アップデートソリューション: "のhttp://" のない

要求URLが先頭に追加し、問題の原因となった "のhttpを://は、" あなたが設定し、Railsの5rack-corsを使用することができ、問題

+0

ヘッダレスポンスに 'Access-Control-Allow-Origin:*'を追加しましたが、引き続き同じエラーが発生します。私はjQuery 1.9を使用しているので、jQueryとJSの問題は問題にならないはずです。私が送信しているjQuery AJAXリクエストのための私の編集を見てください。 – darksky

+0

どのようなエラーが表示されますか? –

+0

これは次のことを意味しますか?** Webサービスの応答に変更が必要ですか?** –

0

を解決しましたそれはすべてのURLを許可する。

Rails.application.config.middleware.insert_before 0, Rack::Cors do 
    allow do 
    origins '*' 
    resource '*', headers: :any, methods: [ 
     :get, :post, :put, :patch, :delete, :options, :head 
    ] 
    end 
end 
0

私は、多くのフリーホストがクロスドメインCORSをサポートしていないため、CORの代わりにJSONPを使用することをお勧めします。詳細はworking examples(JSONPとCORSの両方)です。

関連する問題