我正在尝试将一个事件监听器附加到一个按钮,该按钮将在单击时进行ajax调用。
我在文件中预留了一些php,我们将调用test.php。 我使用了实时jquery函数来攻击按钮的点击事件。 ajax函数会将页面上input元素的值传递给test.php。 然后test.php文件将使用该值来确定要使用的文件的URL。 test.php文件根据匹配的电子邮件重复删除csv文件。 csv文件通过上传输入元素上传。
这是我的代码,目前无效。 Fiddler表示正在向服务器发送请求,但没有响应。
HTML
<input type="button" id="csv_dedupe" value="dedupe-file">
Jquery的
$_CFG_PROCESSORFILE = "http://localhost/Gene/IMEXporter/include/IMEXporter_processor.php";
$("#csv_dedupe").live("click", function(e) {
file_name = 'C:\\server\\xampp\\Gene\\IMEXporter\\include\\files\\' + $("#IMEXp_import_var-uploadFile-file").val();
$.post($_CFG_PROCESSORFILE, {"task": "csv_dupe", "file_name": file_name}, function(data) {
alert("success");
}, "json")
});
PHP
if ($task == "csv_dupe") {
$input_filename = $_REQUEST["file_name"];
$output_filename = $_REQUEST["file_name"];
$input_file = fopen($input_filename, 'r');
$output_file = fopen($output_filename, 'w');
$email_addresses = array();
// Read the header
$headers = fgetcsv($input_file, 0);
fputcsv($output_file, $headers);
// Flip it so it becomes name => ID
$headers = array_flip($headers);
// Read every row
while (($row = fgetcsv($input_file, 0)) !== FALSE)
{
$email = $row[$headers['email']];
// Do we already have this email address?
if (isset($email_addresses[$email]))
continue;
// Mark this email as being found
$email_addresses[$email] = true;
// Write it to the output
fputcsv($output_file, $row);
}
}
我似乎无法弄清楚为什么它不起作用以及我做错了什么。任何想法都会受到赞赏。
修改 * 已修复,但新错误显示 *
请求返回时收到了一些错误。
警告:fputcsv()期望参数2为数组,布尔值在第45行的C:\ server \ xampp \ htdocs \ Gene \ IMEXporter \ include \ IMEXporter_processor.php中给出
警告:array_flip()要求参数1为数组,在第47行的C:\ server \ xampp \ htdocs \ Gene \ IMEXporter \ include \ IMEXporter_processor.php中给出布尔值 “成功”
答案 0 :(得分:0)
找到有类似问题的人here。
在打开文件前添加行
ini_set('auto_detect_line_endings',TRUE);
fgetcsv()在到达文件末尾时返回布尔值“false”。来自php-manual:
fgetcsv() returns NULL if an invalid handle is supplied or FALSE on other errors, including end of file.
的引用: