升级PHP 8后AJAX动态加载内容失败求助
动态加载内容失效(PHP 8.0升级后500错误+跨域提示)
升级到PHP 8.0后,滚动到底部动态加载内容的功能失效。触发AJAX请求时控制台报500错误,同时提示“strict-origin-when-cross-origin”。
前端JS代码
$(window).scroll(function() { if($(window).scrollTop() + $(window).height() > $(document).height() -50) { var counter= parseInt($('#contentcounter').attr('value')); var query= $('#query').attr('value'); $.ajax({ url: 'loadcontent_dynamically.php', data: ({counter: counter, query: query}), type: 'POST', success: function (data) { $('#content-container').append(data); $('#contentcounter').attr('value',counter +12); //increase input value } }); } });
背景补充
loadcontent_dynamically.php与index.php处于同一目录,用于从数据库加载内容并返回HTML- 页面所在子域名转发至主域名外的其他文件夹
- 此前功能正常,本人并非专业开发者,希望获得简单易懂的解决提示,必要时可提供
loadcontent_dynamically.php代码
解决提示
先排查PHP 8.0兼容性问题:PHP 8.0对语法错误、废弃函数的检查更严格,比如旧版的
mysql_*数据库函数已完全移除,未定义变量直接使用也会触发严重错误。
可以在loadcontent_dynamically.php开头添加以下代码,直接显示错误信息:ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);然后直接在浏览器访问这个PHP文件,就能看到导致500错误的具体原因。
解决跨域提示问题:虽然文件在同一目录,但子域名转发规则可能导致AJAX请求的实际域名和页面域名不一致。把AJAX的
url改成绝对路径,比如:url: 'https://你的子域名/对应路径/loadcontent_dynamically.php',确保请求和页面同域名。
检查请求参数的安全性:PHP 8.0中如果直接使用
$_POST['counter']或$_POST['query'],当参数不存在时会抛出错误。可以改成空合并运算符来避免:$counter = $_POST['counter'] ?? 0; $query = $_POST['query'] ?? '';
内容的提问来源于stack exchange,提问作者Maki
相关产品推荐
相关产品推荐

