【问题标题】:jQuery.ajax + php 5.3 - always executing error functionjQuery.ajax + php 5.3 - 总是执行错误函数
【发布时间】:2015-02-09 19:31:54
【问题描述】:

(Newb here) 我有一个 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 函数时,@ 987654327@函数已经解决了吗?)

感谢您的帮助!!! :D

更新 1:我通过从 ajax 中删除 complete 函数更改了上面的代码,并向 error 函数添加了一些额外的参数。

【问题讨论】:

  • 当警报被触发时,response 是什么?
  • 在警报处设置断点并查看调用堆栈。这可能会有所启发。
  • 我认为complete 总是被调用,无论我认为你在寻找什么success
  • 你的 php 脚本没有返回 JSON
  • @cmorrissey 我在错误函数中添加了一些参数并删除了完整的函数。当我运行它时,我得到了一些额外的信息:alert(error) 给出了parseerroralert(errorThrown) 显示SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data。我猜测 ajax 正在隐式尝试解析页面并发现错误,但我不知道它可能是什么。

标签: javascript php jquery ajax csv


【解决方案1】:

无论成功或错误,总是调用complete。因此,您遇到了错误情况,并且在执行错误后无论如何都会调用 complete 。您可以在错误函数中添加额外的参数(jqXHR jqXHR、String textStatus、String errorThrown)来找出错误是什么。

【讨论】:

  • 我在错误函数中添加了一些参数,并删除了完整的函数。我在运行它时得到了一些额外的信息:alert(error) 给出了 parseerror 并且 alert(errorThrown) 显示了 SyntaxError: JSON.parse: unexpected character at line 1 column 1 JSON 数据。我猜测 ajax 正在隐式尝试解析页面并发现错误,但我不知道它可能是什么。
  • 因为你提到dataType为Json,它试图解析返回的数据。您需要确定您的响应是否是有效的 json 响应。它似乎在第 1 行/第 1 列引发错误。这就是您需要查看回复的地方。
  • 我很抱歉我的愚蠢,但我不知道该怎么做。你能给我小费吗?
  • 您可以使用 firebug net pannel 查看返回的响应。检查以确保您的 ajax 调用收到 200 成功响应。
【解决方案2】:

尝试使用success 而不是complete,并为您的PHP 脚本添加一个JSON 答案,例如echo json_encode((object) array('success'=&gt;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);
        },
    });         
}

【讨论】:

  • 我已经尝试在代码中使用您的示例,但我仍然收到错误 SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data。关于如何检查第 1 行第 1 列的内容有什么想法吗?
  • 使用 header('Content-Type: application/json');在你的 php 文件中
猜你喜欢
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
  • 1970-01-01
  • 2016-04-11
相关资源
最近更新 更多