在 Laravel 中使用 AJAX GET 方法发送请求

Posted

技术标签:

【中文标题】在 Laravel 中使用 AJAX GET 方法发送请求【英文标题】:Send Request In Laravel Using AJAX GET Method 【发布时间】:2020-12-07 11:01:01 【问题描述】:

想通过 AJAX 访问 Show 函数数据,但是当我在路由中传递 id 变量时返回错误

控制器

public function show($id)

    $features['UnitFeatures'] = UnitFeatures::find($id);
    return $features;

查看刀片文件

$(document).ready(function()
$.ajaxSetup(
    headers: 
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    
);

var feature_id = $('#unitFeatures').val();

$.ajax(
    url: ' route('unitfeatures.show',feature_id) ', // error in this line when i pass feature_id value to route
    type: 'GET',
    dataType: 'json',
    success: function(response)
      console.log(response);
     
    );
  );

请给我一个解决方案

【问题讨论】:

这能回答你的问题吗? ***.com/questions/29308441/… 不,我从输入值中获取一个 id 并传入路由 也许这样:***.com/questions/27634285/… 尝试使用键值对在数组中传递 id,类似于 route('unitfeatures.show', ['id' => feature_id]) @LQS 不起作用,因为您无法将 JS 变量插入 php 代码 【参考方案1】:

问题是您无法在 PHP 代码中访问 JS 变量。 您必须在 JS 代码中手动获取路由 uri 并替换占位符。

您可以使用以下代码获取 Route 的 URI: \Route::getRoutes()->getByName('unitfeatures.show ')->uri

这会将 uri 作为字符串返回:/sometext/id

现在您可以使用 str.replace() 或任何您喜欢的函数将 id 替换为 feature_id

var feature_id = $('#unitFeatures').val();
var origUrl = ' \Route::getRoutes()->getByName('unitfeatures.show ')->uri';
$.ajax(
    url: origUrl.replace('id', feature_id), 
    type: 'GET',
    dataType: 'json',
    success: function(response)
      console.log(response);
     
    );
  );

【讨论】:

我也会使用路由 url。但问题是我使用 Route::resource('unitfeatures','FeaturesController') 所以它会自动生成 SHOW 函数。我称之为 unitfeatures.show 我知道问题所在。我没有对此进行任何研究,但也许有一种方法可以让您访问原始命名路由。 @MUSTOFA 是否有效或您是否找到了其他答案?【参考方案2】:

您在 PHP 代码中使用 Javascript 变量的问题您可以在执行 PHP 代码后使用 Javascript 变量,将其视为字符串。

$.ajax(
    url: " route('unitfeatures.show') "+'/'+feature_id,
    type: 'GET',
    dataType: 'json',
    success: function(response)
      console.log(response);
     
    );
  );

【讨论】:

这行不通,因为route('unitfeatures.show', $id) 需要$id 来生成路由 @Aless55 route('unitfeatures.show', $id) 将生成与http://127.0.0.1:8000/your_url/id 相同的 URL,表明您可以按照我回答的方式进行操作,我已经测试过它的工作正常。 是的,但是这个 route('unitfeatures.show') 会给你一个错误 您需要在路由文件Route::get('/your_url', 'controller@function')->name('unitfeatures.show'); 中定义它,然后 route('unitfeatures.show') 才能正常工作。 @Aless55 请查看 laravel 文档以了解 Generating URLs To Named Routes

以上是关于在 Laravel 中使用 AJAX GET 方法发送请求的主要内容,如果未能解决你的问题,请参考以下文章

使用 Laravel 将 jQuery Ajax POST 请求作为 GET 发送

如何将数据从ajax get方法发送到laravel中的控制器?

此路由不支持 GET 方法。支持的方法:POST。 laravel 5.8 阿贾克斯

获取错误支持的方法:GET、HEAD Laravel

laravel 4持续数据正在进行 - jquery ajax提交

laravel 4持续数据正在进行 - jquery ajax提交