(此处为Newb)我有一个PHP函数,它从服务器获取2个csv文件,并用这些文件中包含的值之间的差异创建一个新文件。这个PHP函数位于一个单独的文件test.php
中,如下所示:
<?php
require_once('libs/parsecsv-for-php-master/parsecsv.lib.php');
$csv1name = $_POST['csv1'];
$csv2name = $_POST['csv2'];
$data1 = 'data/'.$csv1name.'.csv';
$data2 = 'data/'.$csv2name.'.csv';
$csv1 = new parseCSV($data1);
$csv2 = new parseCSV($data2);
$csv = new parseCSV();
$csv->data[0] = array('label','difference');
$j = 1;
for ($i = 0; $i < count($csv1->data); $i++) {
$csv->data[$i+1] = array($j.'d',$csv1->data[$i][$csv1name] - $csv2->data[$i][$csv2name]);
if($i == 0) {$j += 20;}
else {$j += 21;}
}
$csv->save('test.csv');
?>
此函数工作正常并生成预期的csv文件。我有一个JavaScript函数,它位于另一个页面(即update.html
)上,并通过ajax调用前面提到的php函数:
function callPHP() {
$.ajax({
type:"POST",
url:"test.php",
dataType:"json",
data:{csv1: '02-01-2015', csv2: '02-12-2014'},
error: function(requestObject, error, errorThrown) {
alert(error);
alert(errorThrown);
},
});
}
问题:错误函数总是执行,也就是说,每当我运行callPHP()时,我都会收到两个警报。
问:为什么总是调用error?
(额外:是否可以使用response
变量?如何调试它而不必每次都将文件上传到服务器?是否可以保证在调用complete
函数时,$csv->data
函数已经解析?)
谢谢你的帮助!!!:D
UPDATE 1:我通过从ajax中删除complete
函数来更改上面的代码,并为error
函数添加了一些额外的参数。
complete无论成功与否都会被调用。所以,您正在遇到错误条件,并且在执行错误后,无论如何都会调用complete。您可以在error函数中添加额外的参数(jqXHRjqXHR、StringtextStatus、StringerrorThrown)来确定错误是什么。
尝试使用success
而不是complete
,并在PHP脚本中添加一个JSON答案,例如echo json_encode((object) array('success'=>true));
,因为AJAX调用具有用于JSON响应的dataType:"json"
参数,所以AJAX调用将尝试解析JSON。
PHP代码:
header('Content-Type: application/json');
echo json_encode((object) array('success'=>true));
AJAX:
function callPHP() {
$.ajax({
type:"POST",
url:"test.php",
dataType:"json",
data:{csv1: '02-01-2015', csv2: '02-12-2014'},
success: function(response) {
alert(response);
},
error: function(response) {
alert(response);
},
});
}