4

私のウェブサイトから、同じドメインにあるが異なるポートにあるバックエンド サービスへの jquery ajax 呼び出しによって、ビデオ アップロード プログレス バーを作成しようとしています。

https://mywebsite.com/upload呼び出しhttps://mywebsite.com:3000/api/video/upload

これが私のajaxスクリプトです:

$.ajax({
  xhr: function()
  {
    var xhr = new window.XMLHttpRequest();
    //Upload progress
    xhr.upload.addEventListener("progress", function(evt){
      if (evt.lengthComputable) {
        var percentComplete = evt.loaded / evt.total;
        //Do something with upload progress
      }
    }, false);

   return xhr;
  },
  url: "https://mywebsite.com:3000/api/video/upload",
  data: dataForm,
  cache: false,
  contentType: false,
  processData: false,
  crossDomain: true,
  type: 'POST'
});

このajaxを呼び出すと、私のPOSTリクエストは常にOPTIONSになりました

OPTIONS https://mywebsite:3000/api/video/upload Invalid HTTP status code 404 

xhr 関数を削除すると、ajax スクリプトは正常に動作します。動画を 1 つアップロードできましたが、進捗リスナーがありません。

私のバックエンドは node.js で構築されています。助けてくれてありがとう。

4

3 に答える 3

2

サーバーが OPTIONS リクエストをサポートしていないことがわかったので、これを node.js ファイルに追加します

app.options('*', function(req, res, next){
    res.send(200);
});

それはうまくいきます:)

于 2013-10-16T18:09:21.093 に答える
0

GET、POST メソッドをクロスドメインで送信する場合、最初に「プリフライト」リクエストが OPTIONS メソッドによって送信されます。

https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control#Preflighted_requests

404 Not Found 応答が返されているようです。OPTIONS メソッドのリクエストを送信できるようにして、リクエストのターゲット URI が 200 OK などを返すようにします。

于 2013-10-16T18:04:22.927 に答える