2015-09-25 198 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文件

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