AJAX调用错误500(内部服务器错误)

时间:2015-07-19 02:41:44

标签: php jquery ajax foreach

我有一个页面,在加载时,会填充3个下拉菜单供用户选择。在我的localhost上,这很好,但在我的实时服务器上,我在开发人员工具中收到错误“POST(我的站点名称)500(内部服务器错误)jquery.js:8630。

这是jquery:

$(function() {
    //after load, populate lists
    Update_List_ProcedureAreas_Schedule();
    Update_List_Patients_Cancel();
    Update_List_Cancel_Reasons();
});

这是其中一个功能,但其他两个几乎完全相同,但所有3个都失败了。我发送一个通用函数php文件我想运行的函数,如果有任何参数的功能也是如此。也许有点奇怪,但它可以帮助我组织我的代码:

function Update_List_Patients_Cancel() {
    $.ajax({
        url: 'php/functions.php',
        type: 'POST',
        dataType: 'json',
        cache: false,
        data: {Function_ID: 'pull_patient_list_cancel'},
        success: function(data){
            var dropDown = document.getElementById("selectedpatient_cancel");
            dropDown.options.length=0;
            dropDown[dropDown.length] = new Option('', '')
            for (i = 0; i < data.length; i++) {
                dropDown[dropDown.length] = new Option(data[i].Patient_Name, data[i].Patient_UID)
            }
        },
        error: function() {

        }
    });
}

这是'php / functions.php'中的PHP,它接受Function_ID,然后使用开关验证输入,然后使用任何适当的变量调用该函数:

<?php
    session_start();
    //Make sure a funciton was sent
    if(isset($_POST['Function_ID']) == true) {$tempFunction = $_POST['Function_ID'];}
    else {echo "No fuction selected";}

    //switch to functions
    switch($tempFunction) {
        case 'pull_patient_list_cancel':
            pull_patient_list_cancel();
            break;
    }


//Pull patient list for cancel drop down
function pull_patient_list_cancel() {
    require $_SESSION['db_connect'];  //code to connect to the database, which is successful, btw

    $returnArray = array();

    $sql = "
        SELECT Patient_UID, Patient_Name
        FROM tbl_patients
        WHERE Active = 1
        ";

    if($result = $conn->query($sql)) {
        $conn->close();
        foreach($result->fetch_all(MYSQLI_ASSOC) as $row) {
            $returnArray[] = $row;
        }
        echo json_encode($returnArray);
    } else {
        $conn->close();
        echo "Failed - pull patient lists cancel";
    }
}

看起来由于某种原因,我无法在foreach循环中执行。我已经放入虚假的回声来查看函数停止运行的位置,并且它不会在每个循环内或之后输出任何回声,但它将一直运行直到该循环开始。我已经检查了开发工具中的响应日志,看到伪造的回声一直持续到foreach循环,然后什么都没有。

有什么想法吗?

------------解-----------------

问题是我在localhost xampp设置上安装了mysqlnd,但它没有安装在我今天设置的digitalocean lampp服务器上。这使得fetch_all(MYSQLI)不起作用。但是,我可以坚持使用mysql安装并使用fetch_assoc()并且它工作正常。

但是,我最终使用:

在我的digitalocean Droplet上安装mysqlnd

apt-get install php5-mysqlnd

然后使用

重新启动服务器

service apache2 restart

现在我的所有fetch_all(MYSQLI)函数都能正常工作。谢谢大家的帮助。

2 个答案:

答案 0 :(得分:1)

PHP功能页面上存在语法错误....

你不能像这样使用isset

更改您的代码
    if(isset($_POST['Function_ID']) == true) //which is wrong 

     if(isset($_POST['Function_ID']) && $_POST['Function_ID'])==true) 
   // this is the right way 

连接应在所有程序执行完毕后关闭

   else{} 
   $conn->close();

答案 1 :(得分:1)

在获取foreach的结果之前,无法关闭连接。循环后关闭连接。

更好的是,删除两个连接关闭语句,并在else块之后放一个。

if($result = $conn->query($sql)) {
    foreach($result->fetch_all(MYSQLI_ASSOC) as $row) {
        $returnArray[] = $row;
    }
    echo json_encode($returnArray);
} else {
    echo "Failed - pull patient lists cancel";
}

$conn->close();