Массив JQuery для использования в AJAX - PullRequest
0 голосов
/ 27 апреля 2011

Я не слишком уверен в своих силах, но здесь идет. Я хочу, чтобы JQuery нашел атрибут данных всех элементов определенного класса. Затем я хочу добавить их в массив ajax dataString.

Есть 6 элементов с этим классом, каждый из которых имеет атрибут данных. Вместо этого включите их все по атрибутам id, несомненно, это более простой способ. Будет ли это работать.

Здесь идет

var data[] = $('.sidescroller').attr('data');

var dataString = 'function=' + scripts + '&data[]=' + data[];

//execute PHP
$.ajax({
        type: 'POST',
        data: dataString,
         url: '<?php echo $thisposturl;?>?scripts',

Есть идеи, как это сделать.

Marvelous

Ответы [ 5 ]

3 голосов
/ 27 апреля 2011

Во-первых, нет, .attr() получит только атрибуты первого элемента в списке

var data = $('.sidescroller').map(function() {
    return $(this).attr('data');
}).get();

Во-вторых, не создавайте параметры запроса вручную, это подвержено ошибкам и может также использоваться как злоупотребление:

Отправьте параметр данных в виде набора пар ключ-значение следующим образом:

data: {
    'function': scripts,
    'data': data
}
0 голосов
/ 27 апреля 2011

Я думаю, что вы ищете

var data= [];
$('.sidescroller[data]').each(function(){
    data.push($(this).attr('data'))
});
var strdata = data.join(",");
alert(strdata );

Вы можете найти рабочий образец здесь .

0 голосов
/ 27 апреля 2011
var dataString = 'function=' + scripts;

$('.sidescroller').each(function() {
    dataString += '&data=' + $(this).attr('data');
}       

//execute PHP
$.ajax({
 type: 'POST',
 data: dataString,
 url: '<?php echo $thisposturl;?>?scripts',

Будет ли это работать?

0 голосов
/ 27 апреля 2011

Согласно спецификациям HTML5. настраиваемые атрибуты data должны именоваться так: data-name. Затем вы можете использовать .data для извлечения данных. Пример ниже:

HTML

<div id="foo" class="has-data" data-test="foo"></div>
<div id="bar" class="has-data" data-test="bar"></div>

JavaScript

var data = {};
$(".has-data").each(function(){
    data[this.id] = $(this).data("test");
});

$.post('/', data);
0 голосов
/ 27 апреля 2011

Я думаю, что функция .attr () работает с первым элементом среди совпадающих элементов, лучше было бы использовать функцию map.

var dataArr = [];
$(".sidescroller").map(function(){
    dataArr.push($(this).attr("data"));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...