我正在通过 ajax 调用一个 php 文件(对于字典),它对我的开发机器中的所有单词(及其 ids)都有效。但是在现场机器中,对于某些话,我得到一个 xmlhttp.status 500 (内部服务器错误)。
js代码:
xmlhttp.open("GET","displaySense_GET.php?SenseParameters="+strParams,true);
xmlhttp.send();
所以在现场机器中,有一些特殊的 strParams 例如“ 115744@909@0@115744@115744@specific_word ” .php 文件因内部服务器错误而崩溃。(尽管对于大多数单词来说效果很好)。
所以我想,嘿,让我们在我的浏览器中点击 .php 文件看看会发生什么
http://livemachine.com/displaySense_GET.php?SenseParameters=115744@909@0@115744@115744@specific_word
在我的浏览器中它不会崩溃,而是返回正确的结果!换句话说,它仅在通过 AJAX 检索时崩溃(代码 500),并且仅针对参数“SenseParameters”的某些特定组合,例如“115744@909@0@115744@115744@specific_word”。同样,这对现场机器有效,在开发机器中,它永远不会崩溃。
也许它有帮助...... displaySense_GET.php 看起来像这样:
<?php
require_once('dirpath.php');
if ( isset($_GET['SenseParameters']) ) {
$senseparams = trim($_GET['SenseParameters']);
$strRes = "";
$output="";
if (strlen($senseparams) > 1) {
try {
$senseparams = str_replace("@", "#", $senseparams);
$obj = new COM("dllname.ExtFunctions") or die("Unable to instantiate dllname");
$output = $obj->fnInitialize("lang", $APPLICATIONDIRECTORY . "\\lex", $APPLICATIONDIRECTORY . "\\dll", "utf8");
$output = $obj->fnBringSense($senseparams);
$strRes = $output;
echo $strRes;
}
catch (Exception $e) {
echo "Fatal error: " . $e->getMessage() . " :internal error";
}
}
} else {
echo "error:displaySense";
}
?>
任何人都可以帮助解决为什么会发生这种情况?也许事实是,如果我直接点击 url 它不会崩溃,但如果我通过 javascript 调用它,它会返回状态 500,告诉你什么?
(单词是utf8 - 不是英文,但这不应该是一个问题,如果是的话,它会为所有单词崩溃)。
ps 更特别的是,它不会在
$obj->fnBringSense($senseparams);
使用参数并在字典中进行实际搜索的行,它将在
$obj->fnInitialize("lang", $APPLICATIONDIRECTORY . "\\lex", $APPLICATIONDIRECTORY . "\\dll", "utf8");
行,它不使用参数,只进行一般初始化。
编辑:
错误不会在异常中被捕获,因此返回一个有效的状态=200,它会在 ajax 调用中返回一个状态 500