Используя SerializearRay для не форме объектов?
-
04-10-2019 - |
Вопрос
Я пытаюсь опубликовать некоторые данные, построенные из некоторых элементов без формы, но я не могу его взломать.
Как я могу создать массив в том же формате, что и serializeArray()
Делает с полями формы?
Я пробовал несколько вариаций на это, но он только поднимает последнее .active
ярлык.
$('li.tag.active').each(function() {
values = {};
values['tagID'] = $(this).attr('id');
});
$.post("/scripts/php/process.php",{
'data': data,
funcName : 'tagResults'
},function(results){
$("#results").html(results);
})
Решение
ОК, - нашел это в конце, который работает точно так, как если бы он был вводным полям с SerializearRay () ...
function getTags(){
var data = new Array();
$('li.tag.active').each(function() {
data.push({ 'name':$(this).attr("name"), 'value':$(this).attr("id")});
});
$.post("/scripts/php/process.php",{
'data': data,
funcName : 'tagResults'
})
}
Другие советы
Добавление этой функции к вашему коду JS позволяет сериализовать любой объект с атрибутами «Name» и «Value». Я обычно использую его для сериализации форм. Я знаю, что вы сказали, что эти элементы управления бесформены, но я представляю, это можно было бы использовать для сериализации любого объекта с атрибутом имени / значения. Он также выглядит достаточно легко, чтобы изменить его, чтобы искать другие атрибуты объекта, как идентификатор. Трудно точно сказать, что вы делаете там, поскольку вы не показываете определение «данные» или использование «значений»
$.fn.serializeObject = function()
{
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
Тогда просто добавьте его в свою строку URL
var dataToPassToAjax = 'allData=' + myObject.serializeObject();
Если вы проходите только одно значение, вам не нужно сериализовать.
$.post("/scripts/php/process.php",{ 'data': 'data=' + $('li.tag.active').id, funcName : 'tagResults' }).
затем в процессе .php, просто получите значение $ _Request [«Данные» и у него будет ваш идентификатор
Лучший ответ, который я видел от OB. и оружие:jquery serialize / serializearray из элемента, который не является формой
$('div :input').serializeArray()
В дополнение к входам это поднимает выбор и текстуарию. Милая.
С этой функцией вы можете сделать любой набор элементов сериализма:
function makeSerializable(elem) {
return $(elem).prop('elements', $('*', elem).andSelf().get());
}
Тогда вы можете использовать это так:
var arr = makeSerializable('li.tag.active').serializeArray();
или
var $elem = $('li.tag.active');
var data = makeSerializable($elem).serialize();