Laravel 10集成Ajax jQuery后页面异常,请求技术协助
Laravel 与 Ajax 集成遇到500错误及内存耗尽问题
问题背景
我是Laravel和Ajax jQuery新手,集成二者后遇到无法解决的问题,相关代码和错误如下:
相关代码
HTML代码
<li> <a href="" onclick="routeTomystore()"> <i class='bx bxs-shopping-bag-alt'></i> <span class="text">My Store</span> </a> </li>
基础页面代码
<div class="con"> @include('dashboard') </div>
路由配置
Route::get('/mystore', [routecontroller::class,'mystore'])->name('mystore');
Ajax jQuery代码(原代码存在语法错误)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script type="text/javascript"> routeTomystore(){ event.preventDefault(); const CSRF_TOCKEN=$('meta[name="csrf-token"]').attr('content'); $.ajax({ url: /mystore, type: "GET", data: { CSRF_TOCKEN }, success: function (data) { $("#con").html(data) }, }) </script>
控制器代码
public function mystore():View{ $user = Registrationform::get(); return view('message', compact('user')); }
出现的错误
- 浏览器提示:HTTP ERROR 500,127.0.0.1 当前无法处理此请求
- PHP致命错误:允许的内存大小536870912字节耗尽(尝试分配32768字节),错误出现在视图文件和
ErrorPageViewModel.php中
解决方案
1. 修复Ajax代码的语法错误
- 函数定义缺失
function关键字,修正为:function routeTomystore(){} url参数值需用引号包裹:url: '/mystore'- 选择器错误:页面中容器是
class="con",应使用$(".con").html(data)而非$("#con") - GET请求无需传递CSRF令牌(Laravel默认CSRF中间件排除GET请求),可直接删除
data参数
修正后的Ajax代码:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script type="text/javascript"> function routeTomystore(){ event.preventDefault(); $.ajax({ url: '/mystore', type: "GET", success: function (data) { $(".con").html(data); }, error: function(xhr){ console.log(xhr.responseText); // 添加错误回调便于调试 } }); } </script>
2. 解决内存耗尽问题
内存耗尽通常由视图无限循环或数据量过大导致:
- 检查
message.blade.php视图,确认是否存在递归包含(如再次引入dashboard视图导致循环) - 若
Registrationform::get()返回数据量极大,改用分页加载:$user = Registrationform::paginate(10); - 临时提升PHP内存限制(仅临时方案,需找到根源):
- 在项目根目录
.htaccess添加:php_value memory_limit 1G - 或在
public/index.php开头添加:ini_set('memory_limit', '1G');
- 在项目根目录
3. 开启调试模式定位详细错误
在.env文件中设置APP_DEBUG=true,浏览器将显示Laravel详细错误信息,快速定位问题根源
内容的提问来源于stack exchange,提问作者Abdul Aziz
相关产品推荐
相关产品推荐

