2013-02-07 55 views
1

我试图通过jQuery上传文件到我的远程服务器,但我似乎无法得到它的工作。jQuery使用FormData上传PDF?

用户需要能够上传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,这意味着我错过了这个过程中的关键一步。

+0

您是否正在使用支持该类型上传的浏览器进行测试? (除了IE <10) –

+0

是的,Safari 6.0.2。 – Charlie

+0

HTML正在从'localhost'运行,但是,如果那么重要... – Charlie

回答

2

我想这

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

应该

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

这可能是个问题,但这不是问题。显然JSONP仅用于获取,不张贴 – Charlie

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"); 
     },