JS Ajax请求导致“500(内部服务器错误)”

时间:2017-02-24 13:25:05

标签: php ajax linux

即使你可能认为它,这不是一个重复的帖子,至少我还没能找到另一个处理这个特定问题的线程。

这是问题所在。

我们正在开发一个客户网站,我们使用这个基本的JS ajax调用来从PHP文件中获取数据:

jQuery.ajax({
        url: '/pathtofile/my-ajax-handler.php',
        type: 'POST',
        data: { field1: "value" },
        success: function (response) {
        jQuery("div.mycontainer").attr("data-update", response);
        },
        error: function () {
            //your error code
        }
    }); 

目标PHP文件是一个简单的脚本,它执行curl并从header响应中返回一个值。它不使用ajax调用中提供的POST参数,因此我只需在浏览器中直接输入PHP文件的URL即可获取数据,这可以在没有任何PHP或Apache服务器错误的情况下工作。

PHP文件如下所示:

<?php
function getheaderdatafromcurl($string, $start, $finish) {
    $string = " ".$string;
    $position = strpos($string, $start);
    if ($position == 0) return "";
    $position += strlen($start);
    $length = strpos($string, $finish, $position) - $position;
    return substr($string, $position, $length);
}

$apiURL= 'https://path-to.api.com/apipath/api?limit=1&start=0';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);


$response = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);

$totalcount = trim(getheaderdatafromcurl($header, "Total-Results:", "Link:"));

if($totalcount > 0) {
echo $totalcount;
}
?>

正如我所提到的,当我直接从浏览器执行文件时,PHP脚本会返回没有任何错误的值。 但是当ajax调用尝试获取值时,它会在Chrome开发人员面板中显示“500(内部服务器错误)”。

此外,我们已经尝试将整个网站复制到我们自己的测试服务器上,一切都正常运行,没有任何错误,包括ajax调用。 我们还确保两个Web服务器上的根.htaccess是相同的。

显然,问题似乎是由我们客户的托管服务上的某些有问题/不兼容的服务器配置引起的,但我之前从未遇到过这个特殊问题。

我客户的基本网络服务器信息: 系统:Linux 建造日期:2017年1月20日03:18:35 服务器API:CGI / FastCGI

我希望有人可以帮助我解决这个问题。

更新<!/强>

作为一种临时(可能是永久性的)解决方案,我们决定将网站转移到另一家托管服务提供商,在那里没有任何问题。

与此同时,我们仍然想知道在原始网络服务器上发生此错误的可能原因是什么。

如上所述,问题不在PHP文件本身,例如使用不受支持的功能等 在浏览器中直接打开时,PHP脚本执行时没有错误。 问题是在执行ajax调用时,特别是在原始Web服务器上。

我们无法在其他网络服务器上重新创建问题。

0 个答案:

没有答案