Estoy creando un formulario de búsqueda y quiero usar el formato JSON de los campos de búsqueda para llamar a un controlador web genérico usando AJAX. Mi desafío actual es este: estoy usando el siguiente código de formulario:
<form id="frmSearch" class="was-validated" method="post"> <div class="row mb-4"> <div class="col-lg-2 offset-lg-1 text-end">Find companies where...</div> <div class="col-lg-2 text-start"> <select ID="ddlType" Class="form-control rounded" required> <option value="" selected>Search by...</option> <option value="company_name">Company Name</option> <option value="city">City</option> <option value="federal_ein">EIN</option> <option value="state">State</option> </select> </div> <div class="col-lg-1 text-center">contains...</div> <div class="col-lg-4 d-flex"> <input type="text" ID="tbTerm" class="form-control rounded text-black" required /> </div> <div class="col-lg-1 mx-auto"> <input type="submit" ID="btnSearch" class="btn-success btn text-white" text="search" /> </div> </div> </form>Luego, usando un ejemplo que encontré aquí en SO, estoy usando jQuery para formatear los campos del formulario a JSON, así:
$(function () { $('#frmSearch').submit(function () { alert('got here'); var txt = JSON.stringify($('#frmSearch').serializeObject()); alert(txt) }); })El problema es que la alerta se activa, así que sé que el código se está ejecutando, excepto que Stringify falla silenciosamente y la segunda alerta nunca se activa. No me sale ningún error en la consola. ¿Alguna ayuda aquí sobre por qué sucede esto?
Nunca he usado jquery, sin embargo, buscando en Google y con conocimiento personal, se me ocurrió esto.
$(function () { $('#frmSearch').submit(function (event) { event.preventDefault(); object= {} formData = new FormData(event.target); formData.forEach((value, key) => object[key] = value); alert('got here'); var txt = JSON.stringify(object); alert(txt) }) });¡Espero haberte podido ayudar! Saludos.
<form id="frmSearch" onsubmit='return onSubmit(this)'>...</form> function onSubmit(form){ var data = JSON.stringify( $(form).serializeArray() ); alert( data ); return false; //to test : prevent submiting }O usando jquery:
$(function () { $('#frmSearch').submit(function () { var txt = JSON.stringify($('#frmSearch').serializeArray()); alert(txt) }); })