2017-07-15 26 views
-1

jQuery(フロントエンド)とPython(バックエンド)を使用してWebアプリケーションを開発しています。データベースの内容を更新するためのPUT要求を行う、これは私がコンソールに入るとエラーになりますが:エラーオプションnet :: ERR_CONNECTION_REFUSED

OPTIONS "REST APIのURL" ネット:: ERR_CONNECTION_REFUSED

私のjQueryのコードは次のとおりです。

$.ajax({ 
 
    type: "PUT", 
 
    url: "REST API URL", 
 
    headers: {"Content-Type": "application/json", "Authorization": AuthToken}, 
 
    data: "details to be updated in database", 
 
    contentType: "application/json; charset=utf-8", 
 
    dataType: "json", 
 
    success: function(data,status) { 
 
     //do something with data 
 
    }, 
 
    error: function(data,status) { 
 
     //show error data and status 
 
    } 
 
)};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

私は、HTTPのGET以外の要求とPOSTが最初にPRしているかについて読みますOPTIONS要求としてeフライトされ、真の要求である場合にのみ、PUT/DELETE/PATCH要求として処理されます。
私はCORSの問題かもしれないが、GET/POST/PUT/PATCH/DELETE要求を可能にするCORSがバックエンドから有効になっているという解決策を見ました。さらに、私は正常にGETとPOST要求を行うことができますが、PUT要求は通過していません。
私はChrome Dev Toolsを使用しており、キャッシュとCookieの消去/ DNSのフラッシュ/ Chromeの再インストールによってChromeのこのエラーを解決する方法について調査しましたが、これまでのところ解決策はありませんでした。
私はフロントエンドのUIを作成していますが、これがクライアントサイドエラーかサーバーサイドエラーか分からないのですか?
ご協力いただければ幸いです。

+0

url: "REST API URL"、これは本当のapi url権限でなければならないことをご存じですか? –

+0

実際のAPIを使用しましたが、ポート番号については忘れてしまいました。私の終わりからの非常にばかげたミス。 ありがとう –

答えて

0

実際にはCORSの問題です。ブラウザはOPTIONSメソッドを使用してリクエストをプリフライトします。 OPTIONS要求が成功した後に実際の要求(あなたの場合はPUT)が行われます。

バックエンドがOPTION要求に応答することを確認します。すべてのOPTION要求を簡単にキャッチして200 OKまたは204 NO CONTENTを返すことができます。

+0

バックエンドは、GET/POST/PUT/DELETE/OPTIONS要求を許可してCORSを許可するように構成されています。 問題はPUT要求とPATCH要求に対してのみ発生しますが。 GETとPOSTリクエストは正常に送信されています。 –

+0

どのような手段が設定されていますか?あなたはOPTIONSのプリフライトに応答する必要があります!プリフライトは非シンプル(PUT、DELETE、...)リクエストに必要です。 'Preflighted requests'のMozilla [docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)を確認してください。バックエンドコードを共有してCORSを許可する方法が役立つかもしれません。 –

+0

私はsettings.pyファイルを許可するために、次のコードを持っているDjangoのサーバーを、持っているCORS: は、 'PATCH'、 'DELETEを' 'PUT' =( 'GET'、 'POST'、 CORS_ALLOW_METHODS 、 'オプション' ) –

0

確かに、これはバックエンドの問題です。これは、バックエンドとフロントエンド間のクロスオリジン通信が正しく接続されていない場合に発生します。あなたがcorsをインポートし、ミドルウェアを設定したとしたら、元のURLと要求URLに関してPUTメソッドを使用して間違いを犯した可能性があります。あなたが行うことができます

もの:

1)(バックエンドとフロントエンド)両方のサーバが稼働していることを確認します。

2)Google開発ツールを見て、ネットワークのセクションをご覧ください。リクエストヘッダーと一般を見てください。 リクエストURL /バックエンドにバックエンドサーバーのURLがあり、orgin/frontendにフロントエンドURLがあることを確認してください。

3)あなたのhttp.put()メソッドで、あなたがそれを供給しているドメインがあなたのサーバに設定したapiと一致することを確認してください。

4)問題は、バックエンドがフロントエンドに正しく接続されていないため、他のエラーを見つけようと時間を無駄にしないことです。 http.put()メソッドと、インポートしたcorsモジュールとミドルウェアのデバッグに注目してください。

関連する問題