进行 AJAX 调用时出现 500 内部服务器错误
500 Internal Server Error when making an AJAX Call
问题:
我在发出 AJAX 请求时遇到了 500 内部服务器错误,我在 Chrome 控制台中得到了它,但我不明白我做错了什么,我我是编写 AJAX 调用并在 PHP 中处理它们的新手:
{"readyState":4,"responseText":"<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>500 Internal Server Error</title>\n</head><body>\n<h1>Internal Server Error</h1>\n<p>The server encountered an internal error or\nmisconfiguration and was unable to complete\nyour request.</p>\n<p>Please contact the server administrator at \n webmaster@mywebdomain.com to inform them of the time this error occurred,\n and the actions you performed just before this error.</p>\n<p>More information about this error may be available\nin the server error log.</p>\n<p>Additionally, a 500 Internal Server Error\nerror was encountered while trying to use an ErrorDocument to handle the request.</p>\n<hr>\n<address>Apache/2.4.18 (Unix) OpenSSL/1.0.1e-fips mod_jk/1.2.37 mod_bwlimited/1.4 Server at mywebdomain.com Port 80</address>\n</body></html>\n","status":500,"statusText":"Internal Server Error"}
这是 javascript(我想补充一点,当我们服务器上的所有内容都是 'https' 时,我发现它似乎想要 'http' 很奇怪,如果我更改为 'https',然后它带回 'No Access-Control-Allow-Origin is present'...废话,这不是真的,我在 header 中指定,不确定是否因为这是同一个域):
$.ajax({
url: 'http://mywebdomain.com/admin/custom/modules/cac_customize_agent_comp/views/getID.php',
method: 'POST',
dataType: 'text',
data: {wnID: $("#wn_writing946b_number_ida").val(), pcgID: $("#aos_products_cac_customize_agent_comp_1aos_products_ida").val()}
})
.done(function(response) {
console.log("response");
$("#displayText").html(response);
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.log(JSON.stringify(jqXHR));
console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
$("#displayText").html("There was a problem retrieving the records...");
})
.always(function() {
console.log("complete");
});
这里是 php 文件:
<?php
header('Access-Control-Allow-Origin: *');
header('content-type: text/html; charset: utf-8');
$wnID = $_POST['wnID'];
$pcgID = $_POST['pcgID'];
function getDefaultPercentage($wnID, $pcgID){
$sql = "SELECT wn_writing_number_cstm.title_c
FROM wn_writing_number_cac_customize_agent_comp_1_c
RIGHT OUTER JOIN wn_writing_number_cstm ON wn_writing_number_cac_customize_agent_comp_1_c.wn_writing946b_number_ida = wn_writing_number_cstm.id_c
WHERE wn_writing_number_cstm.id_c = '" . $wnID . "'";
$result = $GLOBALS['db']->query($sql);
while($row = $GLOBALS['db']->fetchByAssoc($result) ){
$titleWN = $row['title_c'];
} //end while
$sql = "SELECT pcg_product_comp_grid_cstm.title_c, pcg_product_comp_grid_cstm.percentage_c
FROM aos_products_pcg_product_comp_grid_1_c
LEFT OUTER JOIN pcg_product_comp_grid_cstm ON aos_products_pcg_product_comp_grid_1_c.aos_products_pcg_product_comp_grid_1pcg_product_comp_grid_idb = pcg_product_comp_grid_cstm.id_c
WHERE aos_products_pcg_product_comp_grid_1_c.aos_products_pcg_product_comp_grid_1aos_products_ida = '" . $pcgID . "'";
$result = $GLOBALS['db']->query($sql);
while($row = $GLOBALS['db']->fetchByAssoc($result) ){
$titlePCG = $row['title_c'];
$percentage = $row['percentage_c'];
} //end while
if($titlePCG == $titleWN){
$fullTitle = '';
switch ($titlePCG) {
case "TR":
$fullTitle = 'Trainee';
break;
case "SA":
$fullTitle = 'Sub-Agent';
break;
case "A":
$fullTitle = 'Agent';
break;
case "GA":
$fullTitle = 'General Agent';
break;
case "MGA":
$fullTitle = 'Managing General Agent';
break;
case "FMO":
$fullTitle = 'Field Marketing Organization';
break;
case "DM":
$fullTitle = 'District Manager';
break;
case "RVP":
$fullTitle = 'Regional Vice President';
break;
default:
"";
} //end switch
} //end if
if($titlePCG != '' && $titleWN != ''){
$textToOutput = $fullTitle . ": " . $percentage . "% is the default percentage.";
}
else {
$textToOutput = "There was a problem retrieving the records...";
}
return $textToOutput;
} //end getDefaultPercentage function
$textToOutput = getDefaultPercentage($wnID, $pcgID);
echo $textToOutput;
?>
这是我从错误日志中得到的 php 错误:
[Tue Jun 14 14:25:37.752301 2016] [core:error] [pid 7823] [client XX.XX.XXX.XX:XXXXX] End of script output before headers: getID.php, referer: http://mywebdomain.com/admin/index.php
[Tue Jun 14 14:25:39.347480 2016] [:error] [pid 7822] [client XX.XX.XXX.XX:XXXXX] SoftException in Application.cpp:256: File "/home/mywebdomain/public_html/admin/custom/modules/cac_customize_agent_comp/views/getID.php" is writeable by group, referer: http://mywebdomain.com/admin/index.php
[Tue Jun 14 14:25:39.347557 2016] [core:error] [pid 7822] [client XX.XX.XXX.XX:XXXXX] End of script output before headers: getID.php, referer: http://mywebdomain.com/admin/index.php
您的代码中存在一些语法错误!这就是显示 500 的原因。
很可能您必须在 apache.conf
或 php.ini
中启用 display_startup_errors=1
或执行 ini_set();
P.S再找一些blahblah_error=0
然后改成blahblash_error=1
就大功告成了。
并且不要忘记在进行任何这些更改后也重新启动 apache
我的问题的答案是权限问题。
我将文件移回了核心目录,并决定忘记尝试在中间的每个文件夹上恰到好处地获取权限,结果 bam 工作得很好。
举个例子,当您从直接导航到实际 url 时收到 500 错误时,权限可能是可疑的。
此外,不需要我包含的 headers。
问题:
我在发出 AJAX 请求时遇到了 500 内部服务器错误,我在 Chrome 控制台中得到了它,但我不明白我做错了什么,我我是编写 AJAX 调用并在 PHP 中处理它们的新手:
{"readyState":4,"responseText":"<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>500 Internal Server Error</title>\n</head><body>\n<h1>Internal Server Error</h1>\n<p>The server encountered an internal error or\nmisconfiguration and was unable to complete\nyour request.</p>\n<p>Please contact the server administrator at \n webmaster@mywebdomain.com to inform them of the time this error occurred,\n and the actions you performed just before this error.</p>\n<p>More information about this error may be available\nin the server error log.</p>\n<p>Additionally, a 500 Internal Server Error\nerror was encountered while trying to use an ErrorDocument to handle the request.</p>\n<hr>\n<address>Apache/2.4.18 (Unix) OpenSSL/1.0.1e-fips mod_jk/1.2.37 mod_bwlimited/1.4 Server at mywebdomain.com Port 80</address>\n</body></html>\n","status":500,"statusText":"Internal Server Error"}
这是 javascript(我想补充一点,当我们服务器上的所有内容都是 'https' 时,我发现它似乎想要 'http' 很奇怪,如果我更改为 'https',然后它带回 'No Access-Control-Allow-Origin is present'...废话,这不是真的,我在 header 中指定,不确定是否因为这是同一个域):
$.ajax({
url: 'http://mywebdomain.com/admin/custom/modules/cac_customize_agent_comp/views/getID.php',
method: 'POST',
dataType: 'text',
data: {wnID: $("#wn_writing946b_number_ida").val(), pcgID: $("#aos_products_cac_customize_agent_comp_1aos_products_ida").val()}
})
.done(function(response) {
console.log("response");
$("#displayText").html(response);
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.log(JSON.stringify(jqXHR));
console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
$("#displayText").html("There was a problem retrieving the records...");
})
.always(function() {
console.log("complete");
});
这里是 php 文件:
<?php
header('Access-Control-Allow-Origin: *');
header('content-type: text/html; charset: utf-8');
$wnID = $_POST['wnID'];
$pcgID = $_POST['pcgID'];
function getDefaultPercentage($wnID, $pcgID){
$sql = "SELECT wn_writing_number_cstm.title_c
FROM wn_writing_number_cac_customize_agent_comp_1_c
RIGHT OUTER JOIN wn_writing_number_cstm ON wn_writing_number_cac_customize_agent_comp_1_c.wn_writing946b_number_ida = wn_writing_number_cstm.id_c
WHERE wn_writing_number_cstm.id_c = '" . $wnID . "'";
$result = $GLOBALS['db']->query($sql);
while($row = $GLOBALS['db']->fetchByAssoc($result) ){
$titleWN = $row['title_c'];
} //end while
$sql = "SELECT pcg_product_comp_grid_cstm.title_c, pcg_product_comp_grid_cstm.percentage_c
FROM aos_products_pcg_product_comp_grid_1_c
LEFT OUTER JOIN pcg_product_comp_grid_cstm ON aos_products_pcg_product_comp_grid_1_c.aos_products_pcg_product_comp_grid_1pcg_product_comp_grid_idb = pcg_product_comp_grid_cstm.id_c
WHERE aos_products_pcg_product_comp_grid_1_c.aos_products_pcg_product_comp_grid_1aos_products_ida = '" . $pcgID . "'";
$result = $GLOBALS['db']->query($sql);
while($row = $GLOBALS['db']->fetchByAssoc($result) ){
$titlePCG = $row['title_c'];
$percentage = $row['percentage_c'];
} //end while
if($titlePCG == $titleWN){
$fullTitle = '';
switch ($titlePCG) {
case "TR":
$fullTitle = 'Trainee';
break;
case "SA":
$fullTitle = 'Sub-Agent';
break;
case "A":
$fullTitle = 'Agent';
break;
case "GA":
$fullTitle = 'General Agent';
break;
case "MGA":
$fullTitle = 'Managing General Agent';
break;
case "FMO":
$fullTitle = 'Field Marketing Organization';
break;
case "DM":
$fullTitle = 'District Manager';
break;
case "RVP":
$fullTitle = 'Regional Vice President';
break;
default:
"";
} //end switch
} //end if
if($titlePCG != '' && $titleWN != ''){
$textToOutput = $fullTitle . ": " . $percentage . "% is the default percentage.";
}
else {
$textToOutput = "There was a problem retrieving the records...";
}
return $textToOutput;
} //end getDefaultPercentage function
$textToOutput = getDefaultPercentage($wnID, $pcgID);
echo $textToOutput;
?>
这是我从错误日志中得到的 php 错误:
[Tue Jun 14 14:25:37.752301 2016] [core:error] [pid 7823] [client XX.XX.XXX.XX:XXXXX] End of script output before headers: getID.php, referer: http://mywebdomain.com/admin/index.php
[Tue Jun 14 14:25:39.347480 2016] [:error] [pid 7822] [client XX.XX.XXX.XX:XXXXX] SoftException in Application.cpp:256: File "/home/mywebdomain/public_html/admin/custom/modules/cac_customize_agent_comp/views/getID.php" is writeable by group, referer: http://mywebdomain.com/admin/index.php
[Tue Jun 14 14:25:39.347557 2016] [core:error] [pid 7822] [client XX.XX.XXX.XX:XXXXX] End of script output before headers: getID.php, referer: http://mywebdomain.com/admin/index.php
您的代码中存在一些语法错误!这就是显示 500 的原因。
很可能您必须在 apache.conf
或 php.ini
中启用 display_startup_errors=1
或执行 ini_set();
P.S再找一些blahblah_error=0
然后改成blahblash_error=1
就大功告成了。
并且不要忘记在进行任何这些更改后也重新启动 apache
我的问题的答案是权限问题。
我将文件移回了核心目录,并决定忘记尝试在中间的每个文件夹上恰到好处地获取权限,结果 bam 工作得很好。
举个例子,当您从直接导航到实际 url 时收到 500 错误时,权限可能是可疑的。
此外,不需要我包含的 headers。