我试图上传一个文件并通过PHP从文件中获取一些处理过的数据,但我遇到了一些问题。这是我的简化密码。
HTML代码
<form action="ajax.php" method="post" enctype="multipart/form-data">
<input type="file" name="mypic">
<input type="submit" value="upload" id="submit">
</form>JS码
$(function(){
var button = $('#submit');
button.click(function(){
alert("You clicked!");
getdata();
});
})
function getdata(){
function onDataReceived(data) {
alert("Get the data!");
}
$.ajax({
url : "ajax.php",
method : 'GET',
cache : false,
dataType : 'json',
success : onDataReceived
});
}ajax.php
<?php
$filepath = $_FILES["mypic"]["tmp_name"];
$filename = $_FILES["mypic"]["name"];
SOME CODE HRER;
$mech_para = "Hello";
$json = json_encode(array("mech_para"=>$mech_para));
echo $json;
?>单击submit按钮后,页面将跳转到ajax.php,显示{"mech_para":"Hello"},但没有警告:获取数据!
但是,如果我删除ajax.php中的前两行,如下所示
<?php
SOME CODE HRER;
$mech_para = "Hello";
$json = json_encode(array("mech_para"=>$mech_para));
echo $json;
?>结果完全正常,页面跳转到ajax.php并显示正确的数据和警报(获取数据!)同时也展示了。
我不知道是什么导致了这个结果,也不知道如何解决,如果ajax和全局变量_FILE之间有任何冲突,我会漫游,如果有其他方法可以处理文件并返回我想要返回的JS数据,那么还是。非常感谢!
发布于 2016-10-19 16:39:34
您必须阻止表单提交,并实际发送文件。
<form id="myForm" action="ajax.php" method="post" enctype="multipart/form-data">
<input type="file" name="mypic">
<input type="submit" value="upload" id="submit_button">
</form>然后
$(function(){
$('#myForm').on('submit', getdata);
});
function getdata(e){
e.preventDefault();
function onDataReceived(data) {
alert("Get the data!");
}
$.ajax({
url : "ajax.php",
method : 'POST',
contentType : false,
processData : false,
data : new FormData(this),
dataType : 'json',
success : onDataReceived
});
}发布于 2016-10-19 16:30:40
因为你只是在假设成功。您告诉jQuery要期待JSON,您发出的几乎肯定不是json。
您正在执行GET请求,这意味着$_FILES不可能包含任何内容。这意味着您正在为未定义的索引生成PHP警告
在jquery调用中没有error处理程序,所以jquery甚至不能告诉您它无法解码它接收到的这个(损坏的) json。
永远不要在处理外部资源时假定成功。总是假设失败,检查失败,并把成功当作一个惊喜。这意味着你需要
$.ajax(
....
error : function(jqerr, msg) {
alert('ajax request failed: ' + msg);
}),
c....
);https://stackoverflow.com/questions/40136884
复制相似问题