我尝试上传文件并通过PHP从中获取一些已处理的数据,但我遇到了一些问题。这是我的简化代码。
HTML CODE
<form action="ajax.php" method="post" enctype="multipart/form-data">
<input type="file" name="mypic">
<input type="submit" value="upload" id="submit">
</form>
JS CODE
$(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;
?>
点击提交按钮后,页面将跳转到ajax.php,显示{&#34; mech_para&#34;:&#34; Hello&#34;},但没有提醒:获取数据!
但如果我删除ajax.php中的前两行
<?php
SOME CODE HRER;
$mech_para = "Hello";
$json = json_encode(array("mech_para"=>$mech_para));
echo $json;
?>
结果变得完全正常,页面跳转到ajax.php并显示正确的数据,并且警报(获取数据!)也显示。
我不知道导致此结果的原因及解决方法,如果ajax和GLOBAL VARIABLE _FILE 之间存在任何冲突,我会徘徊,或者如果有任何其他方式我可以处理文件并返回我想要的数据。 非常感谢!
答案 0 :(得分:3)
因为你只是在确定成功。你告诉jQuery期待JSON,你发送的几乎肯定不是json。
您正在执行GET
请求,这意味着$_FILES
包含任何内容都是不可能的。这意味着您正在为未定义的索引生成PHP警告
你的jquery调用没有error
处理程序,所以jquery甚至不能告诉你它没能解码它收到的这个(损坏的)json。
从不 EVER 在处理外部资源时假设成功。总是假设失败,检查失败,并将成功视为一个惊喜。这意味着你需要
$.ajax(
....
error : function(jqerr, msg) {
alert('ajax request failed: ' + msg);
}),
c....
);
答案 1 :(得分:1)
您必须阻止表单提交,并实际发送该文件。
<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
});
}