【问题标题】:Laravel 5.3 Ajax url not found未找到 Laravel 5.3 Ajax 网址
【发布时间】:2017-05-17 14:35:50
【问题描述】:

我正在使用以下 URL http://localhost/npr/public/admin/athletes/test/143 处理屏幕 在此屏幕上,我实现了以下未找到的动态下拉列表 Ajax 调用:

$(document).ready(function() {
 $('select[name="section"]').on('change', function() {

     var sectionID = $(this).val();

     if(sectionID) {
         $.ajax({
             url: './getSportPositions'+sectionID,
             method: 'get',
             //data: {"_token": $('#token').val()},
             dataType: "json",
             success:function(data) {
                 $('select[name="position"]').empty();
                 $('select[name="position"]').append('<option value="">'+ '-- Please choose one --' +'</option>');
                 $.each(data, function(i, position) {
                     $('select[name="position"]').append('<option value="'+position.name+'">'+ position.name +'</option>');
                 });
             }
         });
     }else{
         $('select[name="position"]').empty();
     }
 });
});

路线:

Route::get('getSportPositions{id}','HomeController@getSportPositions');

我也试过:

Route::get('/admin/athletes/test/getSportPositions{id}','HomeController@getSportPositions');

是由于调用 URL 中的运动员 ID 143 造成的吗?我该如何解决这个电话? 从错误看来,它正在尝试访问此路由:

Route::get('/admin/athletes/test/{athlete}/', [
    'uses' => 'HomeController@testAnAthlete',
    'as' => 'admin.test_athlete'
]);

HTML:

    <div class="form-group {{ $errors->has('position') ? ' alert alert-danger' : '' }}">
        <label for="position" class="col-md-3 control-label">Position in Team</label>

        <div class="col-md-6">
            <select class="form-control" name="position" id="position">
                @if (!$errors->has('position'))
                  <option selected value> -- select a team first --  </option>
                @endif
            </select>
        </div>
        @if ($errors->has('position'))
            <span class="help-block">
                <strong>{{ $errors->first('position') }}</strong>
            </span>
        @endif                                        
    </div>                    

【问题讨论】:

  • 请添加选择html代码

标签: php ajax laravel


【解决方案1】:

当你使用 Ajax 时,你必须得到类似的 url

var APP_URL = $('meta[name="_base_url"]').attr('content');

也添加这个 &lt;meta name="_base_url" content="{{ url('/') }}"&gt; 到头标签

那么以后就可以使用APP_URL了

var url = APP_URL+"/getSportPositions/"+sectionID;

【讨论】:

  • 获取带有 ./ 符号的 url 没有问题。我现在添加了您的代码,但 143 id 的问题仍然存在。它现在路由到http://localhost/npr/public/admin/athletes/test/undefined/getSportPositions/4
  • 你能把APP_URL贴在这里吗?
  • 路由应该是Route::get('getSportPositions/{id}','HomeController@getSportPositions');而不是Route::get('getSportPositions{id}','HomeController@getSportPositions');
  • APP_URL 未定义。
  • 你试过了吗? var APP_URL = $('meta[name="_base_url"]').attr('content');
【解决方案2】:

我的补充。在 laravel 视图中:

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

除了@Nikhil Radadiya回答,因为使用jquery意味着你等待页面准备好,你可以使用javascript:

var APP_URL = document.getElementsByTagName('meta')._base_url.content;
var APP_CSRF = document.querySelector("meta[name='csrf-token']").content; // javascript cannot use dash, else you can use csrf_token at meta name

然后你可以在你的 ajax 中使用:

$.ajax({
    headers: {
        'X-CSRF-TOKEN': APP_CSRF
    },
    url: APP_URL + '/your_ajax_path',
    ...
    ...
});

并确保网址已加载到您的网络路由中。

【讨论】:

    【解决方案3】:

    您可以命名路由并使用 BLADE 为该路由设置一个 Javascript 变量。

    例如:

    Route::get('/', 'MyAmazingController@function')->name('my.awesome.route');
    

    然后在您的 Javascript 中,您可以执行以下操作:

    url: '{{ route('my.awesome.route') }}';
    

    如果您将 javascript 放在单独的文件中,您可以在视图中创建一个带有路由的常量。

    val ROUTES = {
        AJAX: '{{ route('my.awesome.route') }}'
    }
    

    【讨论】:

      猜你喜欢
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 2017-04-30
      • 1970-01-01
      • 2017-03-26
      • 2014-06-23
      • 1970-01-01
      相关资源
      最近更新 更多