1

我试图通过 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,这意味着我错过了这个过程中的关键步骤。

4

2 回答 2

2

我猜这个

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

应该

$name = $_FILES["file"]["name"];
于 2013-02-07T23:19:49.640 回答
0

我只是想让这个可见,所以我正在回答这个问题的主要问题。

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

我找到了一个网站,其中列出了您可以启用的多种类型的服务器,CORS我建议您查看一下。

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

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

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

beforeSend: function (xhr) {
            xhr.setRequestHeader("Cache-Control", "no-cache");
            xhr.setRequestHeader("pragma", "no-cache");
        },
于 2013-02-07T23:53:45.223 回答