tags:

views:

1386

answers:

4

Below is my $.ajax call, how do I put a selects (multiple) selected values in the data section?

$.ajax({
 type: "post",
 url: "http://myServer" ,
 dataType: "text",
 data: {
  'service' : 'myService',
  'program' : 'myProgram',
  'start' : start,
  'end' : end ,
  },
 success: function(request) {
   result.innerHTML = request ;
 } // End success
  }); // End ajax method

EDIT I should have included that I understand how to loop through the selects selected options with this code:

$('#userid option').each(function(i) {
 if (this.selected == true) {

but how do I fit that into my data: section?

+3  A: 

how about using an array?

data: {
    ...
    'select' : ['value1', 'value2', 'value3'],
    ...
},

edit: ah sorry, here's the code, a few caveats:

'select' : $('#myselectbox').serializeArray(),

in order for serializeArray() to work though, all form elements must have a name attribute. the value of 'select' above will be an array of objects containing the name and values of the selected elements.

'select' : [
    { 'name' : 'box', 'value' : 1 },
    { 'name' : 'box', 'value' : 2 }
],

the select box to produce the above result would be:

<select multiple="true" name="box" id="myselectbox">
   <option value="1" name="option1" selected="selected">One</option>
   <option value="2" name="option2" selected="selected">Two</option>
   <option value="3" name="option3">Three</option>
</select>
Owen
You probably also want the selector $(":selected #selectbox") where "#selectbox" is your select tag
Sugendran
CarolinaJay65
+1  A: 

Thanks to the answer from @Owen, I got this code to work.

For a select box with an id="mySelect" multiple="true"

    var mySelections = [];
 $('#mySelect option').each(function(i) {
  if (this.selected == true) {
   mySelections.push(this.value);
  }
 });


    $.ajax({
      type: "post",
   url: "http://myServer" ,
   dataType: "text",
   data: {
  'service' : 'myService',
  'program' : 'myProgram',
        'selected' : mySelections
  },
   success: function(request) {
  result.innerHTML = request ;
      }
    }); // End ajax method
CarolinaJay65
Owen
A: 

The correct way to represent a collection of multiple options selected is to use an array, by naming the SELECT tag with a [] suffix.
The problem is that it is not correctly handled by the jQuery method serialize().
For a SELECT like this, infact:

<select name="a[]">
    <option value="five">5</option>
    <option value="six">6</option>
    <option value="seven">7</option>
</select>

serialize sends this array: a[]=0&a[]=1&a[]=2 received by PHP this way:

[a] => Array
    (
        [0] => 0
        [1] => 1
        [2] => 2
    )

where real values are lost.

EmanueleDG
A: 

emanueleDG is right, hats the correct method and thats how it is meant to be used. Thx EmanueleDG

Hardik