クリックすると ajax 呼び出しを行うボタンにイベント リスナーをアタッチしようとしています。
test.php という名前のファイルに、いくつかの php を取っておきます。ライブ jquery 関数を使用して、ボタンへのクリック イベントを攻撃しました。ajax 関数は、ページ上の入力要素の値を test.php に渡します。test.php ファイルは、その値を使用して、使用するファイルの URL を決定します。test.php ファイルは、一致する電子メールに基づいて csv ファイルを重複排除します。csv ファイルは、アップロード入力要素を介してアップロードされます。
ここに私のコードがありますが、現在は機能していません。Fiddler は、要求がサーバーに送信されているが、応答が来ていないことを示しています。
HTML
<input type="button" id="csv_dedupe" value="dedupe-file">
Jクエリ
$_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);
}
}
なぜ機能しないのか、何が間違っているのかわかりません。どんなアイデアでもいただければ幸いです。
EDIT *修正済みですが、新しいエラーが表示されます*
リクエストが返されたときにいくつかのエラーを受け取りました。
警告: 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 で指定されたブール値「成功」