【发布时间】:2015-08-15 00:47:37
【问题描述】:
所以我试图在我的网站上获取文件上传进度条。如果我只是上传资源
$.ajax({
url: $rootScope.URL, //Server script to process data
type: 'POST',
beforeSend: beforeSendHandler,
success: completeHandler,
error: errorHandler,
data: formData,
cache: false,
contentType: false,
processData: false
});
它工作得很好,但是如果我添加事件来收听进度:
$.ajax({
url: $rootScope.URL, //Server script to process data
type: 'POST',
xhr: function() { // Custom XMLHttpRequest
var myXhr = $.ajaxSettings.xhr();
if(myXhr.upload){ // Check if upload property exists
myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // For handling the progress of the upload
}
return myXhr;
},
beforeSend: beforeSendHandler,
success: completeHandler,
error: errorHandler,
data: formData,
cache: false,
contentType: false,
processData: false
});
我明白了:
OPTIONS myserver.com/controller/filtercontroller.php? 405 (Method Not Allowed)
jQuery.ajaxTransport.send
jQuery.extend.ajax
(anonymous function)
jQuery.event.dispatch
jQuery.event.add.elemData.handle
XMLHttpRequest cannot load myserver.com/controller/filtercontroller.php?. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. The response had HTTP status code 405.
显然我的服务器没有Access-Control-Allow-Origin 和OPTIONS 对吧?但是filtercontroller.php 的前两行是:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
我尝试了几种不同的解决方案,但没有一个对我有用。
【问题讨论】:
-
Access-Control-Allow-Headers 可能不允许 * 作为接受值,具体取决于服务器/客户端实现 - stackoverflow.com/a/8719346/2155068
-
405 通常由 Web 服务器本身发出。所以你可能会检查你的网络服务器的配置。
-
@MjrKusanagi 在这种情况下无关紧要 -- Access-Control-Allow-Origin: * 是一个可接受的值。
-
只是为了确认——该 php 脚本的顶部实际上没有其他内容,对吗?它实际上是
-
是的,文件的第一行是
<?php header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
标签: javascript php jquery ajax