Pregunta ¿Cómo modifico los datos de formularios serializados en jQuery?


Estoy tratando de enviar mi formulario en AJAX, así que tengo que serializar () los datos. Pero estoy usando fckEditor y jQuery no sabe cómo manejarlo, así que después de la serialización, estoy tratando de modificar manualmente el valor, pero hasta ahora no tengo suerte ... cualquier idea

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);
}

75
2018-02-22 08:32


origen


Respuestas:


serialize devuelve una cadena codificada en URL que contiene los campos de formulario. Si necesita anexarlo, hágalo utilizando las reglas de cadena codificadas por URL estándar, p. Ej .:

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

(Lo anterior supone que siempre habrá un valor en values después de la serialize llamada; si eso no es necesariamente cierto, determine si usar & basado en si values está vacío antes de agregarlo).

Alternativamente, si lo desea, puede usar serializeArray y luego agregar a la matriz y usar jQuery.param para convertir el resultado en una cadena de consulta, pero parece un largo camino 'ronda:

// 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);

Actualizar: En un comentario añadido más tarde dijiste:

El problema es que hay algunos valores predeterminados establecidos en la tecla 'contenido' durante el proceso de serilización, por lo que no puedo adjuntar un nuevo valor, tengo que actualizar el que ya está en él "

Eso cambia las cosas. Es un dolor buscar content dentro de la cadena codificada en URL, así que iría con la matriz:

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);

Probablemente quieras hacer de esto una función reutilizable.


141
2018-02-22 08:35



Aquí hay un plugin jquery completo basado en la respuesta de @ T.J. Puedes llamar

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

Lo cual reemplazará o agregará el parámetro 'foo' con el valor 'bar' (o cualquier otro parámetro que agregue en el objeto)

plugin jQuery:

// 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 ));

3
2018-01-06 08:50