使用ajax中的数据在Laravel中创建输入
Use data from ajax to create an input in Laravel
。你好,yall,我正在尝试使用ajax来运行搜索,然后让它返回到搜索结果页面的链接,每个结果旁边都有一个复选框,这样用户就可以选择要打印的订单。
我找到了链接部分,但不确定如何使用每个搜索结果来创建复选框。
我尝试在JS中使用ajax的"success:"部分,但不能每次都破坏它。
理想情况下,当ajax全部完成时,它将有一个link_to("/{$search_table}/{$result->id}/", $result->street_address)
链接,然后是一个id="$search_table+'_'+$result"的复选框(例如id为"order_123TestStreet"(。
任何建议或帮助都将不胜感激!非常感谢!
JS:
$(document).ready(function(){
$("#search_form").submit(function(e) {
e.preventDefault();
//form_data
var form_data = $('#search_form').serializeArray();
$.ajax({
url: 'search',
type: "POST",
dataType: "html",
data: form_data,
success: function(data){
$("#search_results").html(data);
$("#search_results").addClass('panel callout radius');
},
error: function(xhr, status, error){
console.log(xhr);
console.log(status);
console.log(error);
}
});
});
});
控制器:
public function search(){
$validator = Validator::make(
array(
'search_table' => Input::get('search_table'),
'search_column' => Input::get('search_column'),
'search_input' => Input::get('search_input'),
),
array(
'search_table' => 'required',
'search_column' => 'required',
'search_input' => 'required',
)
);
if($validator->fails()){
exit;
} else {
/*Run Search Query*/
$search_table = Input::get('search_table');
$search_column = Input::get('search_column');
$search_input = Input::get('search_input');
$search_results = DB::table($search_table)->where($search_column, 'LIKE', "%{$search_input}%")->get();
foreach($search_results as $result){
$result_street_address = $result->street_address;
echo link_to("/{$search_table}/{$result->id}/", $result->street_address) . "<br>" . "<br>";
}
}
}
我认为您的问题是使用HTML而不是JSON,而且您应该考虑使用模板,而不是在PHP代码中实现HTML代码。这将是一个很长的答案,请耐心等待
首先,您应该将JS代码切换到适当的AJAX调用。
<!-- index.blade.php -->
<form id="search_form">
{{Form::text('search_table', Input::old('search'))}}<br />
{{Form::text('search_column', Input::old('search'))}}<br />
{{Form::text('search_input', Input::old('search'))}}<br />
<button id="search_button" type="button" class="btn btn-default">
Search
</button>
</form>
<div id="search_results" style="display: none;"> </div>
<script type="text/javascript" src="/bower_components/requirejs/require.js"></script>
<script type="text/javascript" src="/js/global.js"></script>
<script type="text/javascript">
// My testing system uses require, just use jQuery as you used to.
require(["jquery"], function($) {
$("#search_button").click(function() {
$.ajax({
url: '/test',
type: "post",
dataType: "json",
data: $('#search_form').serializeArray(),
success: function(json) {
// Just use json.data so we can add more details if we want to.
if (json.data) {
/**
* Actually you don't have to addClass to your div, you can
* just show or hide it when you don't need it.
*/
// $("#search_results").html(json.data).addClass('panel callout radius');
$("#search_results").html(json.data).show();
}
// Let's give feedback to user that they have gone off route ;)
if (json.error) {
alert(json.error);
}
}
}).always(function(xhr, status, error) {
console.log(xhr);
console.log(status);
console.log(error);
});
});
});
</script>
我为你创建了一个控制器,你可以根据自己的需要改变事情。
<?php
// TestController.php
use Illuminate'Database'Eloquent'Collection;
class TestController extends Controller {
public function getIndex() {
$layout = View::make("test.index");
return $layout->render();
}
public function postIndex() {
/*
* Sorry for shortening the code, you can just fix it as you go.
*/
$f = Input::all();
$rules = [
'search_table' => 'required',
'search_column' => 'required',
'search_input' => 'required',
];
$validator = Validator::make($f, $rules);
if ($validator->fails()) {
return 'Response::json(['error' => 'You have to fill all the fields.']);
} else {
/*
* We have a global array called $f now.
*/
$term = str_replace(" ", "%", $f["search_input"]);
// $search_results = DB::table($f["search_table"])->where($f["search_column"], 'LIKE', "%" . $term . "%")->get();
/*
* I created a result just for testing.
*/
$search_results = new Collection();
$results = [
['id' => 1, 'street_address' => 'Baker Street'],
['id' => 2, 'street_address' => 'Abbey Road'],
];
foreach ($results as $result) {
$newRow = new Collection();
$newRow->id = $result["id"];
$newRow->street_address = $result["street_address"];
$search_results->add($newRow);
}
/*
* Now comes the tricky part.
*/
$layout = View::make("test.results");
$layout->results = $search_results;
return 'Response::json(['data' => $layout->render()]);
}
}
}
现在我们可以为搜索结果创建一个布局。你可以在这个文件中创建一个表单,添加复选框、表单字段等,使用一些cookie和一些会话。你可以让页面记住你搜索的内容,并做更多的技巧。
<!-- results.blade.php -->
@foreach ($results as $result)
<a href="/some/url/{{$result->id}}">
{{$result->street_address}}
</a>
<br />
@endforeach
在routes.php文件中,您应该添加;
Route::controller("test", "TestController");
我想这些应该对你有用。
祝你好运!
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 为effect Composer创建GodRays效果过程
- 从javascript创建一个列表
- onkeyup无法动态创建多个文本区域
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何访问声音管理器2创建的声音对象
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 使用Facebook live API创建实时视频对象时的隐私设置
- Ajax Live搜索发布到Laravel视图
- 在动态创建的元素上获取对特定选择器的引用
- 如何创建带有插槽的vue js组件预加载程序
- 如何在创建键时引用来自同一对象的键
- jquery创建变量并使用它来加载 - laravel
- 在Laravel Elixir中创建一个任务,以指定的顺序运行Gulp任务
- 如何根据 laravel 中的用户输入创建动态字段
- Laravel:上传从数组创建的多行
- Laravel Gulp没有创建js文件夹
- 有可能在普通的Laravel中创建一个web聊天应用程序吗?
- 使用ajax中的数据在Laravel中创建输入