【问题标题】:javascript object's XMLHttpRequest setRequestHeader method doesn't workjavascript 对象的 XMLHttpRequest setRequestHeader 方法不起作用
【发布时间】:2012-12-07 22:07:22
【问题描述】:

我在上传文件时遇到问题。我正在使用THIS 文章中描述的那种方法。我从HERE下载了作者发布的整个脚本。
该应用程序旨在通过 HTML5 拖放加载文件,然后通过 javascript 通过 ajax 请求将它们发送到服务器端。
一切正常,但是当我想从 AJAX 请求标头中读取参数时会出现问题。这是PHP“文件阅读器”的代码:

$fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false);

if ($fn) {
//above there is the upload of the file with file_put_contents function
//which actually works fine when I replace $fn with my own value and ommit the "if" condition

之前,启动了 XMLHttpRequest.setRequestHeader 方法来设置“X_FILENAME”标头。这是javascript:

var xhr = new XMLHttpRequest();

// start upload
xhr.open("POST", $id("upload").action, true);
xhr.setRequestHeader("X_FILENAME", file.name);
xhr.send(file);

这是证据(来自我的 Chrome 的“萤火虫”):

当我在 PHP 中 var_dump $fn 变量时,它返回布尔值 FALSE。怎么了?

附:我在 Win7 x64 上将 XAMPP v1.8.1 与 Apache 2.4.3 和 PHP 5.4.7 一起使用。我在最新的 Chrome 上运行该网站。正如您可以猜到的那样,该站​​点正在本地主机上运行。我没有更改 php.ini 文件中的任何内容 - 一切都设置为默认值。

【问题讨论】:

    标签: php javascript drag-and-drop


    【解决方案1】:

    下划线似乎不是标题名称的有效字符。使用连字符,它会很好地工作。

    xhr.setRequestHeader("X-FILENAME", file.name);
    

    并且您的 PHP 不需要任何更改。

    【讨论】:

    • 您的解决方案效果很好!谢谢你。在第一种方法中,我没有注意到您评论中的最后一行,尽管我注定要失败。
    【解决方案2】:

    Apache 和 PHP 5.3 的新版本

       $UploadDir=dirname(__FILE__).'/'.;
       $Datos_cabecera=getallheaders();
        $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false);
        if (!$fn) {$fn=$Datos_cabecera['X_FILENAME'];} //New versions of Apache and PHP 5.3
        if ($fn) {
        file_put_contents($UploadDir.$fn,file_get_contents('php://input'));
        }
    

    【讨论】:

    • 使用英文变量和cmets。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    相关资源
    最近更新 更多