(这里是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()时,我都会收到两个警报。
问题:为什么总是被调用错误?
(额外:是否可以使用response
变量?如何在不必每次都将文件上传到服务器的情况下进行调试?是否可以确保complete
函数是被叫,$csv->data
函数已经解决了吗?)
感谢您的帮助! :d
更新1:我通过从ajax中删除complete
函数来更改上面的代码,并在error
函数中添加了一些额外的参数。
答案 0 :(得分:0)
无论成功与否,总是会调用完成。因此,您正在运行错误条件,并且在执行错误后仍然会调用complete。您可以在错误函数中添加其他参数(jqXHR jqXHR,String textStatus,String errorThrown)以找出错误。
答案 1 :(得分:0)
尝试使用success
代替complete
,并为您的PHP脚本添加JSON答案,例如echo json_encode((object) array('success'=>true));
,因为您的AJAX调用具有dataType:"json"
参数用于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);
},
});
}