Php 如何通过API调用在URL中加载玩家名称-Laravel 5
我想在我的URL中显示玩家标签。我遇到的问题是我不知道如何在搜索框中请求玩家标签,因为我是通过API调用请求玩家标签的 现在,这就是我所说的路线:Php 如何通过API调用在URL中加载玩家名称-Laravel 5,php,laravel,url,routes,Php,Laravel,Url,Routes,我想在我的URL中显示玩家标签。我遇到的问题是我不知道如何在搜索框中请求玩家标签,因为我是通过API调用请求玩家标签的 现在,这就是我所说的路线: Route::post('/Player/Stats', [ 'as' => 'player-stats', 'uses' => 'StatsController@index' ]); /---------------------------------------------------
Route::post('/Player/Stats', [
'as' => 'player-stats',
'uses' => 'StatsController@index'
]);
/-------------------------------------------------------------------------
// this is how I set up my search box for home page
<form action="{{ route('player-stats') }}" method="POST">
{!! csrf_field() !!}
<input type="text" name="gamertag" id="gamertag" class="form-control" title="Gamer-tag" style="width:40%" required>
<button class="btn btn-lg btn-primary" type="submit">Find</button>
</form>
我不能在我的行动中这样做:
action=“{route('player-stats',$gamertag}”
因为$gamertag没有存储在任何地方这里的问题与PHP无关,而与JavaScript有关 您需要使用HTML5提供的
历史API
。这将允许您将/pop状态
推离历史。这最终意味着您可以修改URL地址
让我们看一下这需要什么,我们假设您正在通过一个ajax请求从一个控制器返回一个JSON对象,该请求是从一个搜索输入的表单提交中触发的
public function MyController(Request $request){
$model = Models::where('key', $request->get('value'))->first();
return response()->json($model);
}
当然,还有相关的Ajax和jQuery
$('form').on('submit', function(e){
e.preventDefault();
$.ajax({
//props
dataType: 'json'
}).done(function(response){
//magic
history.pushState(null, null, 'Player/stats/'+response.gamertag);
});
});
history.pushState
在这里要做的是修改URL并根据pushState
函数的第三个参数进行更改。注意您不能更改域名,因此URL仅在FQDN之后进行操作,例如http://example.com
。但是您确实需要提供完整的p将FQDN作为第三个参数后的ath
.pushState()
的第一个参数是数据
。然后,您可以将ajax响应对象
存储在此状态中。当用户在浏览器中单击返回
时,popState
事件触发,允许我们访问该状态。让我们看一看
$(window).on('popState', function(e){
//e.state contains the data, otherwise e.originalEvent.state will.
});
最常见的用例是将ajax响应
存储在状态内部,因此当在浏览器中单击后退时,您只需重新执行在.done()
响应中执行的任何操作
var $results_container = $('.results-container');
function showResults(response){
//parsing and logic here to handle the ajax response and "Show Results"
$results_container.empty();
$.each(response.row, function(i, row){
$results_container.append(row);
});
}
现在,在您的ajax.done()
函数中,您可以将响应传递给我们的函数
.done(function(response){
showResults(response);
});
但是,我们现在也可以在popState()函数中执行同样的操作
$(window).on('popstate', function(e){
showResults(e.state);
//or maybe it's showResults(e.originalEvent.state)
//honestly can't remember
});
希望这能让你朝着正确的方向前进。选择这个{gamertag?}并通过js更新url。这不是解决方案,只是另一种方式。进一步解释会很方便,伙计,你能解释更多你想要什么和你想做什么吗?我想显示一个玩家的名字(gamertag)在URl中,当在搜索框中键入玩家标签时
$(window).on('popstate', function(e){
showResults(e.state);
//or maybe it's showResults(e.originalEvent.state)
//honestly can't remember
});