Ajax 文件上传后未收到成功响应
Ajax doesn't get a success response back after file upload
我刚开始使用 Ajax,也试图找到解决方案。
问题是:
我将 .csv 上传到服务器。这很好用。但是在 ajax 调用中上传“成功”后不会响应。既不完整也不错误。它什么也没显示。甚至没有空警报。根本不值一提。我也没有在日志中找到任何内容。
当我在没有选择要上传的文件的情况下单击上传按钮时,我收到了成功的响应...
代码如下:
upload.php
<?php
header('Content-type: application/json');
$target_dir = 'uploads/';
$target_file = $target_dir . basename($_FILES["file"]["name"]);
$response[] ='';
if(move_uploaded_file($_FILES["file"]["tmp_name"],$target_file))
{
//$response['message'] = "File was uploaded!";
$response['message'] = csvToJson($target_file);
}
else
{
$response['message'] = 'Sorry, there was an error uploading your file.';
}
echo json_encode($response);
function csvToJson($file)
{
// open csv file
if (!($fp = fopen($file, 'r'))) {
die("Can't open file...");
}
//read csv headers
$key = fgetcsv($fp,"1024",";");
// parse csv rows into array
$json = array();
while ($row = fgetcsv($fp,"1024",";")) {
$json[] = array_combine($key, $row);
}
// release file handle
fclose($fp);
// encode array to json
return $json;
}
?>
upload.js
$(document).ready(function(e)
{
// Submit form data via Ajax
$("#form").on('submit', function(e)
{
e.preventDefault();
var form_data = new FormData($(this)[0]);
$.ajax({
type: 'POST',
url: 'upload.php',
data: form_data,
contentType: false,
cache: false,
processData:false,
success: function(response)
{
//var json = $.parseJSON(response)
alert(response);
},
error: function(error){
console.log("Error:");
console.log(error);
},
complete: function(response){
alert(response);
}
});
});
});
index.php
中的表格
<form id=form enctype="multipart/form-data">
<input type="file" name="file" id="file">
<input type="submit" value="Upload Excel" name="submit">
</form>
最后我想要一个 json 返回上传文件的内容。但是现在如果文件上传了,输出为零。
感谢任何建议!
编辑解决方案:
问题完全不同。
我必须将 csvToJson 的输出格式化为 UTF-8。之后我得到一个 json 作为响应。
格式化为 UTF-8 的函数(从另一个 post 此处获取)
function utf8ize($d) {
if (is_array($d)) {
foreach ($d as $k => $v) {
$d[$k] = utf8ize($v);
}
} else if (is_string ($d)) {
return utf8_encode($d);
}
return $d;
}
解决方案,但无法标记:
问题完全不同。我必须将 upload.php 中的 csvToJson() 的输出格式化为 UTF-8。之后我得到一个 json 作为响应。
格式化为 UTF-8 的函数(从另一个 post 此处获取)
function utf8ize($d) {
if (is_array($d)) {
foreach ($d as $k => $v) {
$d[$k] = utf8ize($v);
}
} else if (is_string ($d)) {
return utf8_encode($d);
}
return $d;
}
我刚开始使用 Ajax,也试图找到解决方案。
问题是:
我将 .csv 上传到服务器。这很好用。但是在 ajax 调用中上传“成功”后不会响应。既不完整也不错误。它什么也没显示。甚至没有空警报。根本不值一提。我也没有在日志中找到任何内容。
当我在没有选择要上传的文件的情况下单击上传按钮时,我收到了成功的响应...
代码如下:
upload.php
<?php
header('Content-type: application/json');
$target_dir = 'uploads/';
$target_file = $target_dir . basename($_FILES["file"]["name"]);
$response[] ='';
if(move_uploaded_file($_FILES["file"]["tmp_name"],$target_file))
{
//$response['message'] = "File was uploaded!";
$response['message'] = csvToJson($target_file);
}
else
{
$response['message'] = 'Sorry, there was an error uploading your file.';
}
echo json_encode($response);
function csvToJson($file)
{
// open csv file
if (!($fp = fopen($file, 'r'))) {
die("Can't open file...");
}
//read csv headers
$key = fgetcsv($fp,"1024",";");
// parse csv rows into array
$json = array();
while ($row = fgetcsv($fp,"1024",";")) {
$json[] = array_combine($key, $row);
}
// release file handle
fclose($fp);
// encode array to json
return $json;
}
?>
upload.js
$(document).ready(function(e)
{
// Submit form data via Ajax
$("#form").on('submit', function(e)
{
e.preventDefault();
var form_data = new FormData($(this)[0]);
$.ajax({
type: 'POST',
url: 'upload.php',
data: form_data,
contentType: false,
cache: false,
processData:false,
success: function(response)
{
//var json = $.parseJSON(response)
alert(response);
},
error: function(error){
console.log("Error:");
console.log(error);
},
complete: function(response){
alert(response);
}
});
});
});
index.php
中的表格<form id=form enctype="multipart/form-data">
<input type="file" name="file" id="file">
<input type="submit" value="Upload Excel" name="submit">
</form>
最后我想要一个 json 返回上传文件的内容。但是现在如果文件上传了,输出为零。
感谢任何建议!
编辑解决方案:
问题完全不同。 我必须将 csvToJson 的输出格式化为 UTF-8。之后我得到一个 json 作为响应。
格式化为 UTF-8 的函数(从另一个 post 此处获取)
function utf8ize($d) {
if (is_array($d)) {
foreach ($d as $k => $v) {
$d[$k] = utf8ize($v);
}
} else if (is_string ($d)) {
return utf8_encode($d);
}
return $d;
}
解决方案,但无法标记:
问题完全不同。我必须将 upload.php 中的 csvToJson() 的输出格式化为 UTF-8。之后我得到一个 json 作为响应。
格式化为 UTF-8 的函数(从另一个 post 此处获取)
function utf8ize($d) {
if (is_array($d)) {
foreach ($d as $k => $v) {
$d[$k] = utf8ize($v);
}
} else if (is_string ($d)) {
return utf8_encode($d);
}
return $d;
}