2013-02-07 57 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"); 
     },