在 Laravel 4.1 中形成 AJAX 后响应周期。*

Posted

技术标签:

【中文标题】在 Laravel 4.1 中形成 AJAX 后响应周期。*【英文标题】:Form AJAX post response cycle in Laravel 4.1.* 【发布时间】:2018-07-10 08:17:31 【问题描述】:

我有一个相当旧的网站,作为新职位的一部分,我继承了该网站 - 它是根据 Laravel 4.1.* 版本规范构建的。

我的问题是 Response::json 在响应中返回未定义的变量,使用标准 AJAX 发布方法,所有 CSRF 内容和正确定义的 ajaxSetup()。

application.blade.php

 $.ajax(
   type: 'POST', //This will always be a post method for the supplier chain check form.
   url: 'supply-us/application', //URL endpoint for the post form method: we'll set this to the controller function we're targeting.
   data:  'companyName': values['companyName'] , //This will carry the form data that is needed to be passed to the server.
   success: function (response) 
       console.log(response['companyName']); << THIS LINE RETURNS "undefined"

       console.log(typeof response) << THIS LINE RETURNS string
   ,
   error: function (response) 
       console.log(response);
   ,
 ); 

values['companyName'] 返回我在表单中输入的内容。上面的“响应”简单返回 html - 所以我认为我的路由可能在 AJAX url 参数中定义不正确或定义不正确,也许?以下是两条适用的路线:

routes.php

Route::controller('supply-us/application', 'ApplicationController');
Route::post('supply-us/application', 'ApplicationController@processSupplierApplication');

ApplicationController.php

<?php

use Illuminate\Http\Request;

class ApplicationController extends FrontController 
  public function getSupplierApplication() 
         return self::getPage('supply-us/application');
    

  public function processSupplierApplication(Request $request) 
    if (Input::has('companyName')) 

       $this->companyName = Input::get('companyName');

       $data = [
          'success': true,
          'companyName': $this->companyName
       ];

       return response()->json($data);

    

  


任何专业提示将不胜感激!

【问题讨论】:

在 ajax 成功后 console.log(response); 会得到什么 @michael 试试这个 console.log(response.companyName); @bipin 我先尝试过 - 仍然未定义... @MichaelRoberts 像这样尝试例如:-$app="error";返回响应()->json($app);然后在你的 console.log(response.companyName); console.log(response.companyName);你正在返回 json 【参考方案1】:

在发布或获取结果时检查控制器中缺少的内容 通常我会遵循

    在blade.php中

    <.form method="post" action="%7B%7Burl('supply-us/application')%7D%7D" .>
      csrf_field()
      <.input type="text" name="companyName" .><.>

删除点试试这个它会帮助你找到控制器中丢失的东西

在你的刀片中

<.input type="text" name="companyName" id="companyName".>

在你的 ajax 中

 var company =  $('#companyName').val();
  $.ajax(
      type: 'POST',
      url: 'supply-us/application', 
      data:  'Company':company,'_token': ' csrf_token() '  , 
  success: function (response) 
    alert(data) // if this not work then try this alert(data.company)

  ,
  error: function (response) 
   console.log(response);
 ,
); 

在你的控制器中

<?php use Illuminate\Http\Request; use Illuminate\Support\Facades\Input; class ApplicationController extends FrontController public function getSupplierApplication() return self::getPage('supply-us/application'); public function processSupplierApplication(Request $req) if (!$req->get('Company')==null) $company = $req->get('Company'); return response()->json($company); else $company="no input give"; return response()->json($company);

【讨论】:

嗨 Bipin - 嗯,好的 - 所以我在 AJAX 提交中使用了 preventDefault,所以我不想走这条线。这是一种响应形式。我正在做所有的 csrf 东西。问题是返回的数据未定义。我只想知道如何在 post controller@function 中接受数据,然后处理该数据,然后将数据提交回视图。它真的不应该是这么复杂的恕我直言。我完全可以用 Django 做到这一点。 Laravel 为什么这么痛苦?? @MichaelRoberts 更新的答案请检查希望这会对你有所帮助 @MichaelRoberts 其实太简单了,你只需要熟悉这个 您的答案有很多问题,我不知道从哪里开始。首先,数据没有定义。那么是 response.companyName 吗? alert(response.CompanyName) 返回为未定义。

以上是关于在 Laravel 4.1 中形成 AJAX 后响应周期。*的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中使用 Ajax 调用将数据发布到数据库?

在 ajax 发布请求中,我的应用被 CORS 策略错误阻止

Laravel 4.1 多对多关系和条件在哪里?

形成 laravel 和 vueJS

升级到 Laravel 4.1 时遇到问题

Laravel 4.1 _token 表单提交错误