由于JQuery Ajax Post导致的500内部服务器错误

时间:2016-06-05 08:57:11

标签: php jquery html ajax

找到答案:

错误是分号,它有效!但正如“KIKO软件指出”由于代码没有意义,数据在数据库中被添加了两次,因此我删除了“$(”script“)。html(result);”在html文件中的行,一切都像魅力一样。这与服务器错误500无关......代码中只有一些错误。

我在尝试执行AJAX帖子时遇到困难。出于某种原因,我收到服务器500错误。我可以看到它在控制器中达到了断点。我尝试从PHP文件中发出警报和回声,但它不起作用。我试着查看其他堆栈溢出查询,但没有帮助。

add_pet.html

中的Ajax调用
<script>
function add_trigger(){
  var name=$('#name').text();
  var breed=$('#breed').text();
  $.ajax({
      type: "POST",
      url: "add_pet.php",
      data: "PET_NAME="+name+"&PET_BREED="+breed,
      cache: false,
      success: function(result) {
        $("script").html(result);
        window.location.href='view.html';
      }
  });
}
$('div[contenteditable]').keydown(function(e) {
  if (e.keyCode === 13) {
    add_trigger();
    return false;
  }
});
</script>

<form>
    <div id="Heading" style="font-weight:400">Join</div>
    <div id='name_label' style="font-weight:100">Name:</div>
    <div id='name' contenteditable='true' style="font-weight:100"></div>
    <div id='breed_label' style="font-weight:100">Breed:</div>
    <div id='breed' contenteditable='true' style="font-weight:100"></div>
    <div id='add_trigger' onclick='add_trigger()' style="font-weight:400"><span style="cursor:pointer">Add pet</span></div>
  </form>

add_pet.php 将数据插入数据库的代码:

<?php 
session_start();
$doctorid=$_SESSION['DOCTOR_ID'];
$PET_NAME=$_POST['PET_NAME'];
$PET_BREED=$_POST['PET_BREED'];

$count_results=execute_MYSQL("SELECT * FROM PETS;");
$PET_ID=$count_results->num_rows;
echo "<script>alert('line=INSERT INTO PETS VALUES ($PET_ID,\"$PET_NAME\",\"$PET_BREED\",$doctorid'));</script>";
execute_MYSQL("INSERT INTO PETS VALUES ($PET_ID,'$PET_NAME','$PET_BREED',$doctorid);");
echo "<script>window.location.href='view.html'</script>"

错误的屏幕截图

enter image description here

4 个答案:

答案 0 :(得分:4)

内部服务器错误是由于服务器端脚本编写错误引起的。它没有与客户端脚本有关的一切。所以我猜你应该查看php代码..你错过了

';'

在服务器端的最后一个回声..你还应该给你完整的PHP代码我的意思是服务器数据库连接和execute_MYSQL函数定义。错误也可能在其中。

答案 1 :(得分:1)

尝试

        type: "GET",

或更改

        data: "PET_NAME="+name+"&PET_BREED="+breed,

with:

        data: {PET_NAME: name, PET_BREED: breed},

无论如何,你的服务器端“error_log”文件的复制和粘贴会很高兴看到!

答案 2 :(得分:1)

成功后,您可以这样做:

function(result){
  $("script").html(result);
  window.location.href='view.html';
}

如果我看着你的ajax文件,如果它有效,它会返回:

<script>window.location.href='view.html'</script>

将这两者结合起来:

$("script").html("<script>window.location.href='view.html'</script>");
window.location.href='view.html';

没有多大意义?

答案 3 :(得分:1)

您尚未将DOCTOR_ID param传递给Ajax调用中的add_pet.php。在Ajax调用之前,您需要捕获doctor_id(在HTML中不明显),然后在Ajax data哈希中传递它。

function add_trigger() {
    var name=$('#name').text();
    var breed=$('#breed').text();
    var doctor_id=$('#doctor').val();

    $.ajax({
        type: "POST",
        url: "add_pet.php",
        data: { PET_NAME: name, PET_BREED: breed, DOCTOR_ID: doctor_id }, 
        cache: false,
        success: function(result) {
            $("script").html(result);
            window.location.href='view.html';
        }
    });
}

如果HTML中没有doctor_id的来源,则必须确定其来源,因为服务器肯定希望收到此值并使用它来插入新行进入PETS。

你还在 add_pet.php 的最后一行中遗漏了一个分号,这会导致问题。如果add_pet.php中没有显示任何剩余的PHP代码,您也希望将它包含在您的问题中,因为这些可能不是PHP代码中的唯一错误。

根据您显示的内容,这些应该清除HTTP 500错误。你肯定还有其他你想看的东西。从PETS表到num_rows的{​​{1}}查询应替换为表ID的自动增量字段。