在我的Laravel 5.5项目中,使用x可编辑的弹出字段对字段进行页面上编辑。用户单击该值,将显示一个可编辑的弹出窗口,确认后将更改提交到数据库(输入或单击选中标记图标)。这很好用,但是后来我更改了路由代码,向页面URL添加了一个参数,以根据所使用的参数加载页面的一个版本或另一个版本。这适用于页面选择,但已破坏了已加载页面中所有x可编辑实例。现在,它们以以下错误中断(显示的第一部分是第一部分,因为错误转储为200行)
Edit Amount
212000.00
{
"message": "",
"exception": "Symfony\\Component\\HttpKernel\\Exception\\MethodNotAllowedHttpException",
"file": "C:\\xampp\\htdocs\\DS_dev_01\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\RouteCollection.php",
"line": 255,
"trace": [
{
"file": "C:\\xampp\\htdocs\\DS_dev_01\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\RouteCollection.php",
"line": 242,
"function": "methodNotAllowed",
"class": "Illuminate\\Routing\\RouteCollection",
"type": "->"
},
...
我的查看页面中的x可编辑代码为:
<a href="#" class="assetName" data-type="text" data-name="split_amount" data-url="update-investment-row" data-pk="{{ $investment_split->id }}" data-title="Edit Amount" data-value="{{$investment_split_yours}}">${{number_format($investment_split_yours)}}</a>
我处理来自此弹出窗口的ajax调用的(web.php)路由是:
Route::post('atcv-split-scenario/update-investment-row', 'InvestmentLineSplitController@updateRow')->middleware('auth');
处理update_row调用的控制器(InvestmentLineSplitController)代码:
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\investment_line_split $investment_line_split
* @return \Illuminate\Http\Response
*/
public function updateRow(Request $request, investment_line_split $investment_line_split)
{
$pk = $request->input('pk');
$splitRecord = $investment_line_split::findOrFail($pk);
// get column name
$col = $request->input('name');
// get new value
$value = $request->input('value');
$splitRecord->$col = $value;
$splitRecord->save();
return \Response::json(array('status' => 1));
}
调用该页面的URL是http://ds_dev_01.test:8080/atcv-split-scenario/Joe%20vs%20Anne/s
,最后一个“ S”参数使该URL失效。在添加最后一个参数(由S或M确定要加载页面的两个版本中的哪个)之前,x可编辑的效果很好,因此以某种方式导致了最后一个参数的问题,但是我看不到我的代码或路由在哪里不正确以及它将如何影响它。上面的所有代码在没有最后一个参数的情况下都能正常工作。
这是幕后的JavaScript:
$(document).ready(function() {
$.fn.editable.defaults.mode = 'popup';
$.fn.editable.defaults.send = "always";
$.fn.editable.defaults.params = function (params)
{
params._token = $("#_token").data("token");
return params;
};
$.fn.editable.defaults.success = function(response, newValue)
{
//if(!response.success) return response.msg;
window.location.reload();
};
$('.assetName').editable({
ajaxOptions: {
dataType: 'json',
type: 'post'
}
});
});
该错误提示使用了错误的方法,但是我知道它是正确的,因为它可以在没有添加URL参数的页面上运行。我需要该参数来确定加载哪个页面,但是如何使x可编辑工作(为什么不这样做)呢?
有什么想法或建议吗?