jQuery.ajax + php 5.3 - 总是执行错误功能

时间:2015-02-09 19:31:55

标签: javascript php jquery ajax csv

(这里是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函数中添加了一些额外的参数。

2 个答案:

答案 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);
        },
    });         
}