当进行AJAX请求到PHP时,是什么导致了500内部服务器错误?

3

我收到了一个内部服务器错误,状态码为500,但我不知道如何进行故障排除。我已经为ajax调用添加了错误捕获,但没有告诉我太多信息。我该如何添加代码以了解请求文件内部发生了什么?我尝试使用var_dump(),但没有任何反应。

    $('#createpanelbutton').live('click', function(){

        var panelname = $('#panelname').val();
        var user_cat = $('#user_cat').val();
        //var whocan = $('#whocan').val();
        var errors='';
        if(panelname=='')
            errors+='Please enter a Brag Book name.<br/>';
        if(user_cat=='0')
            errors+='Please select a category.<br/>';
        if(errors!=''){
            $('#panel_errors2').html('<span class="panel_brag_errors">'+errors+'</span>');
            return false;
        }else{

         $('#createpanelbutton').val('Creating Brag Book...');
            $.ajax({
                async:false,
                dataType:'json',
                type: 'POST',
                url:baseurl+'createpanel.php',
                error:function(data,status,jqXHR){ alert("handshake didn't go through")},
                data:'name='+encodeURIComponent(panelname)+'&category='+encodeURIComponent(user_cat)+'&collaborator='+encodeURIComponent('me'),
                success:function(response){
                    if(response.status=='success')
                        location.href=response.url;
                    if(response.status=='failure')
                        $('#panel_errors2').html('<span class="panel_brag_errors">'+response.message+'</span>');
                }
            });
        }
    });

使用Ajax调用php文件createpanel.php:

 <?php

include_once('s_header2.php');

if($_POST){

    if($_POST['name'] == ''){
            $msg = "Please enter Brag Book name.";
            $result = array("status"=>'failure', "message"=>$msg);
    }elseif($_POST['category'] == ''){
            $msg = "Please select category.";
            $result = array("status"=>'failure', "message"=>$msg);
    }else{

        $db = Core::getInstance();
        $dbUp = $db->dbh->prepare("SELECT id FROM ".USERS_PANEL." WHERE user_id = :uID and title = :tit");         
        $result = '2';
        $dbUp->execute(array(':uID'=>$_SESSION['sesuid'],':tit'=>$_POST['name']));
        $result = '3';
        $numrows = $dbUp->rowCount();
        $result = '4';
        if($numrows == 0){
         $result = '5';
        $dbIn = $db->dbh->prepare("INSERT INTO ".USERS_PANEL." (`user_id`,`title`,`category_id`,`desc`,`type`,`friend_id`) VALUES (?, ?, ?, ?, ?, ?)");

         $dbIn->execute(array($_SESSION['sesuid'],$_POST['name'],$_POST['category'],$_POST['panel_desc'],$_POST['collaborator'],$_POST['jj']));

         $lid = $db->dbh->lastInsertId();            
        //header("Location: ".BASE_URL.addslashes($_POST['bname'])."-".$lid."/");

        $panelurl=BASE_URL.$_POST['name']."-".$lid."/";
        $result = array("status"=>'success', "url"=>$panelurl, "name"=>$_POST['name'], "id"=>$lid);

        }else{              
            $result = array("status"=>'failure', "message"=>'You already have a Brag Book with that name.');
        }
    }

}

echo json_encode($result) ;die;

?>

7
调试500错误的唯一起点是网络服务器的错误日志。 - DaveRandom
尝试同时发布您的服务器错误日志,这可能会对您(和我们)有所帮助。 - freedev
要查看您的调试转储,请直接导航到createpanel.php。 - jantimon
2
@DanGreaves 500 简单地意味着服务器返回了一个 500 状态码。PHP 也可以根据您的错误处理设置来执行此操作。 - Kevin B
@SDC:不是直接的,但你看过KevinB的回答吗?这是一个AJAX请求...一个POST变量被无条件地用于数据库查询中,而这个变量并没有在(jQuery)请求中发送。 - MrWhite
显示剩余3条评论
2个回答

5

内部服务器错误是HTTP状态码之一,其起源在服务器端(很可能是PHP)。

检查您的Web服务器日志。您的500错误的起源就在那里 :)


3

你的ajax请求没有发送这个post变量:$_POST['panel_desc']


这是 $_Post['panel_desc']$_POST['jj']。我在面板的初始设置中留下了这两个字段。看起来PDO不会在空或空字段上继续前进。谢谢! - Claude Grecea
请查看此处的文章:http://www.developersnote.com/2014/01/solved-jquery-ajax-500-internal-server.html[链接] - shamcs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接