【问题标题】:Calling a function using AJAX not working使用 AJAX 调用函数不起作用
【发布时间】:2015-02-13 16:04:06
【问题描述】:

我有一个AJAX 调用,它调用PHP 文件中的一个函数并返回一些JSON。看起来像这样。

$('#uploadCustomerForm').on('submit', function(e) {
    e.preventDefault();

    $.ajax({
        url: "/resources/submit.php?action=uploadCustomers",
        type: "POST",
        data: new FormData(this),
        contentType: false,
        cache: false,
        processData: false,
        success: function(data, textStatus, jqXHR) {
            console.log(data.success);
        },
        error: function (data, textStatus, jqXHR) {
            alert('Uh oh, we could not upload your customers.');
        },
        dataType: "json"
    });
});

这个AJAX最终调用了这个PHP函数:

function uploadCustomers($file_name) {
            // Now we just have to open and read
            $myfile = fopen($file_name, "r") or die("Unable to open file.");
            $columns = fgetcsv($myfile);
            //$sortedColumns = sortColumns($columns); // works when this line is commented out
            while(!feof($myfile)) {
                $row = fgetcsv($myfile);
            }
            fclose($myfile);
            return json_encode(array('success' => $row));
        }

这是我第一次使用AJAX 上传文件。我知道执行是使用正确的参数到达PHP 函数,因为我能够打开文件,并在函数工作时查看$rows。 (sortColumns函数被注释时。)

当我调用sortColumns 以按照我们正在查找的顺序获取 CSV 字段时,该功能突然不再起作用。现在,这是我的sortColumns 函数。

function sortColumns($columns) {
            return $columns;
        }

我哪里错了?我怀疑这要么是显而易见的事情,要么是我没有遵循的一些AJAX 规则。任何帮助将不胜感激。

【问题讨论】:

  • 你的 while 循环没有意义。这是一个 WHILE 循环,表示您有多行 CSV 数据,但您正在执行 $row = ...,这会导致您仅保存从文件中检索到的 LAST 行。
  • 我希望你已经把它设置为<form enctype="multipart/form-data">?
  • @MarcB 是的,我知道,我只是想让它工作,JSON 最终会打印到控制台,所以现在一行数据就足够了。
  • @Blazemonger 是的,我愿意。
  • 嗯,我认为问题在于一行数据。如果 fgetscsv 到达文件末尾,则您不会进入循环。你有任何东西要编码。所以你什么也得不到。文件中是否有不止一行?你得到什么回应? ajax 调用是 500 还是 200?

标签: php jquery ajax csv file-upload


【解决方案1】:

感谢@AndreaBogazzi 将我指向日志文件的位置。

日志文件说我正在调用一个未定义的函数,事实证明,我需要通过以下方式调用该函数:

$this->sortColumns($columns);

【讨论】:

  • 那是什么$this。你实例化了一个对象吗?
  • 该函数是一个类的一部分,但我没有意识到$this关键字在同一个类中调用另一个函数时是必需的。
  • 你打算什么时候告诉我们你在课堂上?呵呵 :)
  • @AndreaBogazzi 我没有意识到这是一个如此重要的细节,我现在知道了!
猜你喜欢
  • 2012-04-12
  • 1970-01-01
  • 2019-02-25
  • 2014-01-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2018-11-12
  • 1970-01-01
相关资源
最近更新 更多