【问题标题】:500 internal server error when using ajax使用 ajax 时出现 500 内部服务器错误
【发布时间】:2024-04-13 09:05:04
【问题描述】:

我在进行 ajax 调用时收到 500 内部服务器错误。

这是调用的 javascript/jquery:

$.ajax({url: 'ServicesAjaxHandler.php',
        data: {action: 'add'},
        type: 'post',
        success: function(output) {
            alert(output);
        },
        error: function (xhr, ajaxOptions, thrownError) {
           alert(xhr.status);
           alert(xhr.responseText);
           alert(thrownError);
        }
    });

这里是被调用的 php 文件:

<?php

if(isset($_POST['action']) && !empty($_POST['action'])) {
    $action = $_POST['action'];
    switch($action) {
        case 'add' : add($_POST);break;
    }
}

public function add($data) {
    return 'test';
}
?>

xhr.responseText 不返回任何内容。

我的 PHP 代码是否存在导致此错误的问题?

【问题讨论】:

  • 第 10 行有 public function。您不需要 public 部分。
  • @andrewsi 太好了,看起来这就是问题所在。一直在做很多面向对象的编程,最近迷茫了。谢谢。

标签: php javascript jquery ajax


【解决方案1】:

在使用它们之前定义你的函数,例如:

function add($data) {
    return 'test';
}

if(isset($_POST['action']) && !empty($_POST['action'])) {
    $action = $_POST['action'];
    switch($action) {
        case 'add' : add($_POST);break;
    }
}

使用关键字public 用于面向对象的应用程序,如果您有这样的设置:

class Test_Class { 

    public function add($data) {
        return 'test';
    }

}

使用关键字 public 是可以接受的,但由于您没有使用对象进行函数交互,因此请去掉工作集的关键字

【讨论】:

  • case 'add' : add($_POST);break; 将不起作用。您还需要更改此类/对象概念。
  • 我上次的评论并不清楚。函数add 在课堂内将不起作用。需要创建该类的对象并访问该方法,或者必须将该方法设为静态。
  • 如果您希望我更新我的答案以显示您将如何使用该功能,那么我可以.. 我只是发布了类示例以显示 public 关键字的使用。
【解决方案2】:

尝试将 public function 更改为 function

function add($data) {
    return 'test';
}

【讨论】: