From dc6f9cfc9cd0e2393b8f3087d8fcfa8e03260d4c Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=B6rn=20Zaefferer?= Date: Thu, 30 Nov 2006 20:52:24 +0000 Subject: [PATCH] Fixed serializing arrays (bug #448) --- src/ajax/ajax.js | 6 +++--- src/ajax/ajaxTest.js | 29 ++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/ajax/ajax.js b/src/ajax/ajax.js index 51f9d60..73eba22 100644 --- a/src/ajax/ajax.js +++ b/src/ajax/ajax.js @@ -712,10 +712,10 @@ jQuery.extend({ } else { // Serialize the key/values for ( var j in a ) { - //if one value is array then treat each array value in part - if (typeof a[j] == 'object') { + // If the value is an array then the key names need to be repeated + if( a[j].constructor == Array ) { for (var k = 0; k < a[j].length; k++) { - s.push( j + "[]=" + encodeURIComponent( a[j][k] ) ); + s.push( j + "=" + encodeURIComponent( a[j][k] ) ); } } else { s.push( j + "=" + encodeURIComponent( a[j] ) ); diff --git a/src/ajax/ajaxTest.js b/src/ajax/ajaxTest.js index 8123ae8..98f7cfc 100644 --- a/src/ajax/ajaxTest.js +++ b/src/ajax/ajaxTest.js @@ -1,5 +1,27 @@ module("ajax"); +test("serialize()", function() { + expect(1); + var data = $(':input').not('button').serialize(); + // ignore button, IE takes text content as value, not relevant for this test + ok( data == 'action=Test&text2=Test&radio1=on&radio2=on&check=on&=on&hidden=&foo[bar]=&name=name&=foobar&select1=&select2=3&select3=1', 'Check form serialization as query string' ); +}); + +test("param", function() { + expect(4); + var params = {foo:"bar", baz:42, quux:"All your base are belong to us"}; + ok( $.param(params) == "foo=bar&baz=42&quux=All%20your%20base%20are%20belong%20to%20us", "simple" ); + + params = {someName: [1, 2, 3], regularThing: "blah" }; + ok( $.param(params) == "someName=1&someName=2&someName=3®ularThing=blah", "with array" ); + + params = {"foo[]":["baz", 42, "All your base are belong to us"]}; + ok( $.param(params) == "foo[]=baz&foo[]=42&foo[]=All%20your%20base%20are%20belong%20to%20us", "more array" ); + + params = {"foo[bar]":"baz", "foo[beep]":42, "foo[quux]":"All your base are belong to us"}; + ok( $.param(params) == "foo[bar]=baz&foo[beep]=42&foo[quux]=All%20your%20base%20are%20belong%20to%20us", "even more arrays" ); +}); + test("load(String, Object, Function) - simple: inject text into DOM", function() { expect(2); stop(); @@ -32,13 +54,6 @@ test("load(String, Object, Function) - check scripts", function() { }); }); -test("serialize()", function() { - expect(1); - var data = $(':input').not('button').serialize(); - // ignore button, IE takes text content as value, not relevant for this test - ok( data == 'action=Test&text2=Test&radio1=on&radio2=on&check=on&=on&hidden=&foo[bar]=&name=name&=foobar&select1=&select2=3&select3=1', 'Check form serialization as query string' ); -}); - test("test global handlers - success", function() { expect(6); stop(); -- 1.7.10.4