2015-09-25 189 views
0

我只是想送一個Ajax調用原始的純文本,無需額外頭的東西,如:阿賈克斯發送FORMDATA沒有webkitboundary

------WebKitFormBoundarycwwJjby5xTdrlr48 
Content-Disposition: form-data; name="upload"; filename="any" 
Content-Type: .... 

Ajax調用:

var fd = new FormData();  
fd.append('file', input.files[0]); 

$.ajax({ 
    url: '/handle_restful_call', 
    data: fd, 
    processData: false, 
    contentType: false, 
    type: 'POST', 
    success: function(data){ 
    alert(data); 
    } 
}); 

更新: 我不在服務器端使用PHP。 返回主題是否有可能只發送原始數據?

+0

出於好奇,*爲什麼*你想這樣做? –

+0

用於上傳json純文本文件。使用Ajax發送前端JavaScript對象時,不存在webkitboundary。當我使用FormData時,他們被添加。 –

+0

這是什麼* real *問題? PHP應該能夠很好地處理'WebKitFormBoundary'。你的文件將在'$ _FILES ['upload']'中。 –

回答

1

XHR 2支持文件上傳。我不認爲你可以用jQuery做到這一點,但你可以用本地XMLHttpRequest做到這一點。

var file = input.files[0]; 

var xhr = new XMLHttpRequest; 
xhr.open('POST', '/handle_restful_call'); 

xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 
xhr.setRequestHeader('X-File-Name', file.name); 
xhr.setRequestHeader('Content-Type', file.type||'application/octet-stream'); 

xhr.onreadystatechange = function(){ 
    if(xhr.readyState === 4 && xhr.status === 200){ 
     var response = xhr.responseText; 
    } 
}; 

xhr.send(file); 
0

使用序列化(): 給你的形式ID:

<form id="myForm" method "POST"> 
...your fields here 
</form> 

的Javascript:

var datastring = $("#myForm").serialize(); 
$.ajax({ 
    type: 'POST', 
    url: 'http://example.com/script.php', 
    data: datastring 
}).done(function(response){ 
    var response = $.trim(response); //the response -if any- from php 
}); 

在AJAX文件,你可以解析使用$ _ POST所有表單域。例如:

<?php 
$username = $_POST["username"]; //etc... 
?> 

如果您想將文本文件傳遞給ajax,請創建一個textarea並在其中轉儲文件的內容。然後把它傳遞給ajax ...我不知道你真的想要做什麼,但希望這可以幫助你...

+0

我的錯誤,我以爲你只是想文件的文件內容...然而,看看這個:http://stackoverflow.com/questions/166221/how-can-i-upload-files-asynchronously/8758614#8758614這可能對你有所幫助 –

+0

我正在使用這種方法,但我不想發送前面提到的webkitboundary。 –

+0

在這種情況下,轉儲(例如)textarea中的文件的文本內容,將其作爲表單數據的一部分發送給ajax,並在ajax文件中,您可以重新創建文本文件並用( textarea)的內容使用:php file_put_contents()...這不適合你嗎? –

0

我不使用在所有new FormData構造函數,直接傳遞文件作爲身體

喜歡的東西fetch(url, { body: input.files[0], method: ..., headers: ... }

1

你可以得到輸入文件內容圍繞它得到:

var obj=document.getElementById("inputfile"); 
upload(obj.files[0]); 

上傳功能:

function upload(file){ 

     var fd = new FormData(); 
     fd.append("file", file); 
     var xhr = new XMLHttpRequest(); 

     xhr.open('POST', 'upload.php', true); 
     xhr.send(fd); 

    } 

這裏是PHP文件

$destination = 'test/'; 

if (isset($_FILES["file"]["name"])) { 

    $name = $_FILES["file"]["name"]; 
    $tmp_name = $_FILES['file']['tmp_name']; 
    $error = $_FILES['file']['error']; 

    //echo $name; 
    //echo $tmp_name; 
    //echo $error; 

    move_uploaded_file($_FILES['file']['tmp_name'], $destination.$name); 

} 

////////////////////////////////// ////////////////////////////////////////

xhr POST沒有大小限制,但PHP有大小限制^^

你可以改變,你可以發送變量「的post_max_size」到PHP的最大數據,在php.ini文件

//////// //////////////////////////////////// //////////////////////////////