Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I modify serialized form data in jQuery?

I am trying to submit my form in AJAX, so I have to serialize() the data. But I am using fckEditor and jQuery doesn't know how to deal with it, so after the serialization, I am trying to manually modify the value, but no luck so far... any ideas

if(content_val!=""){     var values = $("#frmblog").serialize();     values.content = content_val; //content_val is the manually fetched data which I am trying to insert into the serialized content.     alert(content_val); alert(values); } 
like image 489
Bluemagica Avatar asked Feb 22 '11 08:02

Bluemagica


People also ask

What is serialize () in jQuery?

jQuery serialize() Method The serialize() method creates a URL encoded text string by serializing form values. You can select one or more form elements (like input and/or text area), or the form element itself. The serialized values can be used in the URL query string when making an AJAX request.

How do you serialize data in a form?

To serialize a FormData object into a query string, pass it into the new URLSearchParams() constructor. This will create a URLSearchParams object of encoded query string values. Then, call the URLSearchParams. toString() method on it to convert it into a query string.

How can I access serialized data in PHP?

To get the POST values from serializeArray in PHP, use the serializeArray() method. The serializeArray( ) method serializes all forms and form elements like the . serialize() method but returns a JSON data structure for you to work with.


2 Answers

serialize returns a URL-encoded string containing the form fields. If you need to append to it, you do so using the standard URL-encoded string rules, e.g.:

var values = $("#frmblog").serialize(); values += "&content=" + encodeURIComponent(content_val); 

(The above assumes there will always be one value in values after the serialize call; if that's not necessarily true, determine whether to use & based on whether values is empty before you add to it.)

Alternately, if you like, you can use serializeArray and then add to the array and use jQuery.param to turn the result into a query string, but that seems a long way 'round:

// You can also do this, but it seems a long way 'round var values = $("#frmblog").serializeArray(); values.push({     name: "content",     value: content_val }); values = jQuery.param(values); 

Update: In a comment added later you said:

The problem is, there is some default values being set in the 'content' key during the serilization process, so I can't just attach a new value, I have to update the one already in it"

That changes things. It's a pain to look for content within the URL-encoded string, so I'd go with the array:

var values, index;  // Get the parameters as an array values = $("#frmblog").serializeArray();  // Find and replace `content` if there for (index = 0; index < values.length; ++index) {     if (values[index].name == "content") {         values[index].value = content_val;         break;     } }  // Add it if it wasn't there if (index >= values.length) {     values.push({         name: "content",         value: content_val     }); }  // Convert to URL-encoded string values = jQuery.param(values); 

You'd probably want to make this a reusable function.

like image 86
T.J. Crowder Avatar answered Sep 20 '22 17:09

T.J. Crowder


Here is a full jquery plugin based on @T.J's answer. You can call

$('form#myForm').awesomeFormSerializer({     foo: 'bar', }) 

Which will replace or add the param 'foo' with value 'bar' (or any other param you add in the object)

jQuery plugin :

// Not builtin http://stackoverflow.com/a/5075798/2832282 (function ( $ ) {     // Pass an object of key/vals to override     $.fn.awesomeFormSerializer = function(overrides) {         // Get the parameters as an array         var newParams = this.serializeArray();          for(var key in overrides) {             var newVal = overrides[key]             // Find and replace `content` if there             for (index = 0; index < newParams.length; ++index) {                 if (newParams[index].name == key) {                     newParams[index].value = newVal;                     break;                 }             }              // Add it if it wasn't there             if (index >= newParams.length) {                 newParams.push({                     name: key,                     value: newVal                 });             }         }          // Convert to URL-encoded string         return $.param(newParams);     } }( jQuery )); 
like image 29
Cyril Duchon-Doris Avatar answered Sep 21 '22 17:09

Cyril Duchon-Doris