Laravel 4.1中AJAX POST请求返回response.companyName为undefined求助
解决Laravel 4.1中AJAX POST响应无法解析的问题
首先,你遇到的response.companyName输出undefined的最常见原因是jQuery没有自动将服务器响应解析为JSON对象,加上你的代码里还有几个小问题,我来一步步帮你排查:
1. 强制AJAX请求解析JSON响应
在你的AJAX配置里,没有指定dataType: 'json',这会导致jQuery根据响应头猜测类型,偶尔会出现识别错误的情况。你只需要在$.ajax配置中新增这个参数,确保响应被解析为JSON对象:
$.ajax({ type: 'POST', url: 'supply-us/application', data: { 'companyName': values['companyName'] ,'_token': '{{ csrf_token() }}'}, dataType: 'json' // 新增这一行,明确要求解析为JSON }).done(function(response) { console.log(response.companyName); });
2. 修复路由冲突问题
你的routes.php里同时定义了Route::controller和Route::post指向同一个URL,这会导致路由优先级冲突,Laravel可能没有正确路由到processSupplierApplication方法。建议保留明确的POST路由,去掉自动生成的控制器路由:
// 删除这一行:Route::controller('supply-us/application', 'ApplicationController'); Route::post('supply-us/application', 'ApplicationController@processSupplierApplication'); // 如果需要GET请求显示表单,单独添加明确路由: Route::get('supply-us/application', 'ApplicationController@getSupplierApplication');
3. 修正控制器里的输入判断逻辑
你控制器里的if (!Input::get('companyName') == null)逻辑有漏洞:当用户输入空字符串时,Input::get('companyName')返回空字符串,!""等于true,而true == null是false,会错误走到else分支。换成Laravel提供的Input::has()方法更可靠:
public function processSupplierApplication() { if (Input::has('companyName') && !empty(Input::get('companyName'))) { $company = Input::get('companyName'); return Response::json([ 'companyName' => $company ], 200); } else { $company = "No company specified"; // 修正拼写错误:compnay → company return Response::json([ 'companyName' => $company ], 200); } }
4. 优化CSRF令牌的传递
你同时在beforeSend里设置了X-CSRFToken头,又在data里添加了_token参数,其实Laravel 4.1两种方式都支持,可任选其一避免重复:
// 方式1:保留beforeSend的头设置,删除data里的_token data: { 'companyName': values['companyName'] }, // 方式2:删除beforeSend逻辑,保留data里的_token(二选一即可)
做完这些修改后,重新测试AJAX请求,应该就能正确获取response.companyName的值了。
内容的提问来源于stack exchange,提问作者GCien
相关产品推荐
相关产品推荐

