views:

38

answers:

3

hello there - trying to post some data built from some none form elements but can't seem to crack it.

how can i create a an array in the same format as serializeArray() does with form fields?

tried several variations on this but it only picks up the last .active tag?

any help appreciated!

    $('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);

    }) 

dan.

A: 
jtp
+1  A: 

Adding this function to your JS code allows you to serialize any object with "name" and "value" attributes.. I usually use it to serialize forms. I know you said these controls are formless, but I would imagine, this could be used to serialize any object with a name/value attribute. It also looks easy enough to change it to look for other attributes of an object, like ID. It's hard to tell exactly what you're doing there as you do not show the definition of "data" or the usage of "values"

    $.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;
    };

Then just add it to your url string

var dataToPassToAjax = 'allData=' + myObject.serializeObject();

If you are only passing ONE value, you don't need to serialize.

$.post("/scripts/php/process.php",{ 'data': 'data=' + $('li.tag.active').id, funcName : 'tagResults' }). 

then in process.php, just get the value of $_REQUEST['data'] and it will have your ID

Dutchie432
That's nice. I gotta try that myself :)
jtp
thanks dutchie - tried this but don't seem to get anything back but maybe i've used it wrong? is
daniel Crabbe
$.post("/scripts/php/process.php",{ 'data': $('li.tag.active').serializeObject(), funcName : 'tagResults'}) the correct way?
daniel Crabbe
if you're just passing one object, you don't need to serialize. $.post("/scripts/php/process.php",{ 'data': 'data=' + $('li.tag.active').id, funcName : 'tagResults' }). then in process.php, just get the value of $_REQUEST['data'] and it will have your ID
Dutchie432
i'm trying to serialize all the li.tag.active objects so it is more than one object i want to serialize. Basically i normally use; var data = $("input.toPost").serializeArray(); which works fine with any input with .toPost class. i'm presuming that $('li.tag.active').serializeObject() would work the same way but it doesn't seem to? the li elements are <li id="id_741" name="tagID" class="tag active">TAG TITLE</li><li id="id_742" name="tagID" class="tag active">TAG TITLE 2</li> <li id="id_748" name="tagID" class="tag">TAG TITLE 3</li> - sorry for not being clear before!
daniel Crabbe
You'll want to change serializeObject to look for ID instead of name.
Dutchie432
A: 

ok - found this in the end which works exactly as if it was input fields with 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'
        }) 

}
daniel Crabbe