【发布时间】:2019-02-07 00:23:36
【问题描述】:
我正在使用 ajax 将我的数据发送到控制器并将其保存在数据库中,在我的代码工作之前,我需要对我的数据进行排序,当它们在排序后附加到刀片中时,它会停止工作 %50。
很高兴知道
Here is my old code and solution of sorting my data(导致 我现在遇到的这个问题)
逻辑
- 我选择设置
- 设置子元素将附加在刀片中(按自定义列排序)
- 我选择单个或多个选项并点击保存按钮
- 数据保存到数据库
更多了解
我的附加数据(基于所选集)包括两种类型的数据
- 我可以手动填写和保存的自定义输入(文本字段和文本区域字段)(仍然可以正常工作)
- 从数据库返回的动态选择选项,我可以选择并保存他们的 ID(这是问题动态)
代码
Script of appending data
<script defer>
$(document).ready(function() {
$('select[name="selectset"]').on('change', function() {
var id = $(this).val();
if(id) {
$.ajax({
url: '{{ url('admin/selectset') }}/'+encodeURI(id),
type: "GET",
dataType: "json",
success:function(result) {
$('div#dataaamsg').empty();
$('div#dataaamsg').append('Use <kbd>CTRL</kbd> or <kbd>SHIFT</kbd> button to select multiple options');
result.sort(function(a,b) {
return (a.position > b.position) ? 1 : ((b.position > a.position) ? -1 : 0);
});
$.each(result, function(key1, value1) {
var vvvid = value1.id;
if(value1['type'] == 'textfield'){
var my_row = $('<div class="row mt-20 ccin">');
$('div#dataaa').append(my_row);
}else if(value1['type'] == 'textareafield'){
var my_row = $('<div class="row mt-20 ccin">');
$('div#dataaa').append(my_row);
}else{
var my_row = $('<div class="row mt-20">');
$('div#dataaa').append(my_row);
}
// second data
$.ajax({
url: '{{ url('admin/findsubspecification') }}/'+value1['id'],
type: "GET",
dataType: "json",
success:function(data) {
// Check result isnt empty
var helpers = '';
$.each(data, function(key, value) {
helpers += '<option value="'+value.id+'">'+value.title+'</option>';
});
if(value1['type'] == 'textfield'){
var my_html = '{{ Form::open() }}<input name="product_id" id="product_id" type="hidden" value="{{$product->id}}"><input name="specification_id" id="specification_id" type="hidden" value="'+vvvid+'"><div class="col-md-4">'+value1.title+'</div>';
my_html += '<div class="col-md-6"><input id="text_dec" name="text_dec[]" placeholder="text field" class="text_dec form-control"></div>';
my_html += '<div class="col-md-2"><button type="button" id="custmodalsavee" class="custmodalsavee btn btn-xs btn-success">Save</button>{{Form::close()}}</div>';
my_row.html(my_html);
}else if(value1['type'] == 'textareafield'){
var my_html = '{{ Form::open() }}<input name="product_id" id="product_id" type="hidden" value="{{$product->id}}"><input name="specification_id" id="specification_id" type="hidden" value="'+vvvid+'"><div class="col-md-4">'+value1.title+'</div>';
my_html += '<div class="col-md-6"><textarea id="longtext_dec" name="longtext_dec[]" placeholder="text area field" class="longtext_dec form-control"></textarea></div>';
my_html += '<div class="col-md-2"><button type="button" id="custmodalsavee" class="custmodalsavee btn btn-xs btn-success">Save</button>{{Form::close()}}</div>';
my_row.html(my_html);
}else{
var my_html = '{{ Form::open() }}<input name="product_id" id="product_id" type="hidden" value="{{$product->id}}"><div class="col-md-4">'+value1.title+'</div>';
my_html += '<div class="col-md-6"><select class="subspecifications form-control tagsselector" id="subspecifications" name="subspecifications[]" multiple="multiple">'+helpers+'</select></div>';
my_html += '<div class="col-md-2"><button type="button" id="savedynspecto" class="savedynspecto btn btn-xs btn-success">Save</button>{{Form::close()}}</div>';
my_row.html(my_html);
}
}
});
// second data
});
}
});
}else{
$('div#dataaa').empty();
}
});
});
</script>
script of saving data (issue part)
<script defer>
$(document).ready(function() {
$("body").on("click", ".savedynspecto", function(e){
var form = $(this).closest('form');
var id = form.find('input[name="product_id"]').val();
// e.preventDefault();
$.ajax({
type: "post",
url: '{{ url('admin/spacssendto') }}',
data: {
'_token': $('input[name=_token]').val(),
'product_id': id,
'subspecifications': $(this).closest('form').find('select.subspecifications').val()
},
success: function (data) {
alert('Specifications added successfully.');
console.log($(this));
},
error: function (data) {
console.log(data);
}
});
});
});
</script>
问题
-
当我尝试保存我的动态值时,我无法获取所选选项的 ID
//网络参数中返回的数据 _token g1GnKZvzXDztR1lqgDdjI5QOg67SfmmBhjm80fKu product_id 18 子规格
Ps1
我尝试将val() 更改为serialize(),我得到了
_token g1GnKZvzXDztR1lqgDdjI5QOg67SfmmBhjm80fKu
product_id 18
subspecifications subspecifications%5B%5D=20&subspecifications%5B%5D=21&subspecifications%5B%5D=23&subspecifications%5B%5D=32"
我只需要21,23,32 而不是在他们每个人之前得到subspecifications%5B%5D=。
Ps2
我已尝试更改$("body").on("click", ".savedynspecto", function(e){,它不会向后端发送任何数据(网络中没有打印,甚至错误代码也没有)
有什么想法吗?
【问题讨论】:
-
你能控制你在 $.each(data, function(key, value) { helpers += ''; });在助手中
-
您能与我分享控制器生成的示例结果吗?
-
@ArashKhajelou 嗨,如果我使用序列化,这是我的结果
array:3 [ "_token" => "Ou5M0WwUziuG3h1WN3D0D2ND5nCtaKejZDUSEnwa" "product_id" => "21" "subspecifications" => "subspecifications%5B%5D=4&subspecifications%5B%5D=5&subspecifications%5B%5D=22" ]如果我使用val这是结果array:3 [ "_token" => "Ou5M0WwUziuG3h1WN3D0D2ND5nCtaKejZDUSEnwa" "product_id" => "21" "subspecifications" => array:1 [ 0 => "3" ] ]PS:val 返回数据的方式是正确的问题是只有当我有多行时才获得第一行值总是返回第一行。
标签: javascript php jquery ajax laravel