【发布时间】:2015-02-13 16:04:06
【问题描述】:
我有一个AJAX 调用,它调用PHP 文件中的一个函数并返回一些JSON。看起来像这样。
$('#uploadCustomerForm').on('submit', function(e) {
e.preventDefault();
$.ajax({
url: "/resources/submit.php?action=uploadCustomers",
type: "POST",
data: new FormData(this),
contentType: false,
cache: false,
processData: false,
success: function(data, textStatus, jqXHR) {
console.log(data.success);
},
error: function (data, textStatus, jqXHR) {
alert('Uh oh, we could not upload your customers.');
},
dataType: "json"
});
});
这个AJAX最终调用了这个PHP函数:
function uploadCustomers($file_name) {
// Now we just have to open and read
$myfile = fopen($file_name, "r") or die("Unable to open file.");
$columns = fgetcsv($myfile);
//$sortedColumns = sortColumns($columns); // works when this line is commented out
while(!feof($myfile)) {
$row = fgetcsv($myfile);
}
fclose($myfile);
return json_encode(array('success' => $row));
}
这是我第一次使用AJAX 上传文件。我知道执行是使用正确的参数到达PHP 函数,因为我能够打开文件,并在函数工作时查看$rows。 (sortColumns函数被注释时。)
当我调用sortColumns 以按照我们正在查找的顺序获取 CSV 字段时,该功能突然不再起作用。现在,这是我的sortColumns 函数。
function sortColumns($columns) {
return $columns;
}
我哪里错了?我怀疑这要么是显而易见的事情,要么是我没有遵循的一些AJAX 规则。任何帮助将不胜感激。
【问题讨论】:
-
你的 while 循环没有意义。这是一个 WHILE 循环,表示您有多行 CSV 数据,但您正在执行
$row = ...,这会导致您仅保存从文件中检索到的 LAST 行。 -
我希望你已经把它设置为
<form enctype="multipart/form-data">? -
@MarcB 是的,我知道,我只是想让它工作,JSON 最终会打印到控制台,所以现在一行数据就足够了。
-
@Blazemonger 是的,我愿意。
-
嗯,我认为问题在于一行数据。如果 fgetscsv 到达文件末尾,则您不会进入循环。你有任何东西要编码。所以你什么也得不到。文件中是否有不止一行?你得到什么回应? ajax 调用是 500 还是 200?
标签: php jquery ajax csv file-upload