別のサーバーにフォームを送信するサイトを作成しています。アップロードの進行状況の追跡には、サーバー側ではNginxHttpUploadProgressModuleを使用し、クライアント側ではjquery-upload-progressを使用します。同じサーバーにフォームを送信してセットアップをテストしましたが、すべて正常に機能しました。別のサーバーに送信しても、進行状況の追跡(クロスドメインスクリプティング)は表示されません。この問題を何時間も調査した後、JQueryによって生成されたGETリクエストに問題があるという結論に達しました。
クエリは次のようになります。
http://domain.com/upload/progress/?X-Progress-ID=39b2825934dbb2f33fe936df734ff840&callback=jsonp1249230337707&_=1249230345572
NginxHttpUploadProgressModuleサイトから:
この場所へのHTTPリクエストには、関連する追跡ゾーンへのアップロード/POSTリクエストで指定された一意の識別子を含むX-Progress-IDパラメーターまたはX-Progress-IDHTTPヘッダーのいずれかが必要です。X-Progress-IDをクエリ文字列パラメータとして使用している場合は、それがURLの最後の引数であることを確認してください。
だから、私の質問は、X-Progress-IDパラメーターをjquery GETリクエストの最後に追加する方法、またはX-Progress-IDヘッダーを設定する方法です。
これはjsonp(jquery.uploadProgress.jsからのコード)では機能しません:
beforeSend: function(xhr) {
xhr.setRequestHeader("X-Progress-ID", options.uuid);
}
現在、リクエストは次のように生成されます(jquery.uploadProgress.jsからのコード):
jQuery.uploadProgress = function(e, options) {
jQuery.ajax({
type: "GET",
url: options.progressUrl + "?X-Progress-ID=" + options.uuid,
dataType: options.dataType,
success: function(upload) {
...