将数据从Jquery发送到Controller 500内部错误

时间:2016-04-13 12:34:30

标签: jquery laravel-5.2

是的,我在过去遇到过这个错误,它与csrf令牌有关,但过去我只是去了中间件VerifyCSRF文件并在忽略列表中包含了该路由。

然而现在这不起作用。我很困惑。

我能想到的唯一区别是我第一次在服务器上进行生产,而现在我在cloud9中进行编码并使用https但是,因为当你在https页面中有易受攻击的代码时,firefox会出现问题,我停用了它,否则网站上的任何内容都不会显示。但那应该没什么可做的。

令我感到困惑的另一件事是,在加载页面时,我已经可以在firebug中看到500错误,但这应该仅在更改选择列表时激活,但是它确实只在页面加载时发生。< / p>

以下是完整代码:

我有部分内容,因为它将被2页使用:

     <script>        
      jQuery(document).ready(function () {
    cargarProvincias();
 //   cargarCiudades();
    $('#country').change(cargarProvincias);
    $('#regions').change(cargarCiudades);

     });

        function cargarProvincias() {            
        var country = $('#country').val();  
          $regionsurl = "{{URL::route('findcountries')}}";

          $.post($regionsurl, {country:country},function(data){
                $('#regions').empty();                 
                $.each(data, function(key, value){                 
                $('#regions').append('<option value="' + key + '">' + value + '</option>')});
                    cargarCiudades();         
              });
          }

          function cargarCiudades(){     

          // alert("You have Selected  :: "+$(this).val());
            var region = $('#regions').val();
          $url = 'http://chefvillas.com/localidades';
          $.post($url, {localidad:region},function(data){           
                $('#towns').empty();                 
                $.each(data, function(key, value){
                var option = $('<option/>', {'id':key, 'text':value});
                $('#towns').append(option);
                });                 
              });               
          }   
    </script>  

然后这是路线:

Route::get('/', 'SearchController@welcome');
Route::post('/', ['as' => 'findcountries','uses'=>'SearchController@findcountries' ]);

这是控制器

 public function welcome(){
      $countries = Property::distinct()->select('country')->get();
      return view('welcome', ['countries' => $countries]);
  }


  public function findCountries(){
    $pais = Input::get('country');
    print_r($pais); // but I never get here because the error blocks it before

   }  

我也试过这个,但反馈没有变化

public function findCountries(){

      if (Request::ajax())
{
    $pais = Input::get('country');
      var_dump($pais);
}

到目前为止,我已经被困了一整天了。我试图改变路由的语法,尽管这与我过去使用的代码相同。

更新

此处“网络”选项卡状态确认它是csrf错误:(令牌不匹配异常)

但我已将URI添加到忽略列表

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = ['findcountries'];
}

TokenMismatchException in VerifyCsrfToken.php line 67:
in VerifyCsrfToken.php line 67
at VerifyCsrfToken->handle(object(Request), object(Closure))
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 62
at StartSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))

更新2

我已将其包含在单独的文件中

// public/js/config.js
$(function () {
    $.ajaxSetup({
        headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') }
    });
});

还有这个metatag

<meta name="csrf-token" content="{{ csrf_token() }}" />

然而,我一直警告的一件事就是橙色的小三角形说:

$ is not defined; please fix or add/* global $*/

enter image description here

但它不仅仅是关于jquery(因为它已经安装并且它可以工作,因为我有一个工作滑块)但是任何包含$的行。如果是$ url,则表示url未定义。

2 个答案:

答案 0 :(得分:0)

当您的第一个ajax调用成功时,您的第二个发布请求:cargarCiudades()正在调用,并且您已将{2}数组中的第二个发布路由包含在您的csrf中间件中,而您已包含$except 1}}在请求的参数中。

我认为在调用第二个请求时会抛出csrt_token

答案 1 :(得分:0)

写下路线 URI ,而不是路线 NAME

protected $except = ['/'];