jQuery使用FormData上传PDF?

时间:2013-02-07 22:56:58

标签: php javascript jquery

我正在尝试通过jQuery将文件上传到我的远程服务器,但我似乎无法让它工作。

用户需要能够上传pdf文件,然后由服务器处理并保存到根文件夹。

的jQuery

$('form').submit(function (e) {
    var fd = new FormData();
    fd.append('file', $('#file')[0].files[0]);
    $.ajax({
        cache: false,
        beforeSend: function (xhr) {
            xhr.setRequestHeader("Cache-Control", "no-cache");
            xhr.setRequestHeader("pragma", "no-cache");
        },
        url: 'http://www.codekraken.com/testing/pointify/test.php?callback=?',
        data: fd,
        dataType: "json",
        processData: false,
        contentType: false,
        type: 'POST',
        success: function (data) {
            console.log(data);
        },
        error: function (data) {
            console.log(data);
        }
    });
    e.preventDefault();
});

PHP

<?php
header('content-type: application/json; charset=utf-8');

$name = $_FILES["fd"]["name"];
echo ($_GET['callback'] . '('.json_encode($name).')');
?>

HTML

<form>
    <input type="file" id="file" name="file">
    <input type="submit">
</form>

当我提交文件(例如input.pdf)然后按提交时,我会收到回复(null)。我希望得到文件的名称input.pdf,这意味着我错过了这个过程中的关键步骤。

2 个答案:

答案 0 :(得分:2)

我猜这个

$name = $_FILES["fd"]["name"];

应该是

$name = $_FILES["file"]["name"];

答案 1 :(得分:0)

我只是想让这个显而易见,所以我回答了这个问题的主要问题。

JSONP仅适用于请求,因此POST无法使用它。随后,您可以使用CORS来解决问题。

I found a site列出了您可以启用CORS的许多类型的服务器,我建议您查看。

就我而言,我在PHP代码中使用了以下标题:

header("Access-Control-Allow-Origin: *");

这会打开所有请求的页面,但它仍然没有使用我的jQuery AJAX代码。为了解决这个问题,我不得不删除设置标题的代码部分,这在发出这些请求时显然是不允许的。所以,我删除了这部分:

beforeSend: function (xhr) {
            xhr.setRequestHeader("Cache-Control", "no-cache");
            xhr.setRequestHeader("pragma", "no-cache");
        },