Sintaxis del parámetro “data” de jQuery.ajax

Estoy tratando de pasar el contenido de una variable de javascript al servidor para su procesamiento. Puedo pasar cadenas estáticas sin problemas, pero cuando paso una variable que contiene una cadena, no se llama el Método Web. Aquí está mi código: (Cliente)

function expand(checkbox) { var selectedrow = checkbox.parentNode.parentNode; var rowindex = selectedrow.rowIndex; var parent = document.getElementById("parentTable"); var NextRow = parent.rows[rowindex + 1]; var cols = selectedrow.cells[1]; var ID = cols.firstElementChild.attributes.value; $.ajax({ type: "post", url: "Playground.aspx/childBind", data: "{sendData: ID}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (result) { alert("successful!" + result.d); } }) NextRow.style.visibility = "visible"; } 

(Servidor)

 [WebMethod] public static string childBind(string sendData) { return String.Format("Hello"); } 

Ahora, si tuviera que probar los datos: “{sendData:” ok “}”, se llama a WebMethod y devuelve una respuesta. ¿Cómo es mi syntax incorrecta?

No tienes que pasarlo como una cadena. Ya que ID es una variable de javascript, debes pasar su valor. Cuando pase datos como "{sendData: ID}" no pasará el valor de ID .

Prueba esto

 data: { sendData: ID } 

"{sendData: ID}" una cadena en lugar de un objeto ( "{sendData: ID}" lugar de {sendData: ID} ). Y los datos que enviaba no eran JSON. Así que elimine la línea contentType y cambie la línea de datos. Deberías reescribir esto como:

 $.ajax({ type: "post", url: "Playground.aspx/childBind", data: {sendData: ID}, dataType: "json", success: function (result) { alert("successful!" + result.d); } }) 

También puedes escribir esto, si quieres enviar JSON:

 $.ajax({ type: "post", url: "Playground.aspx/childBind", data: $.getJSON({sendData: ID}), dataType: "json", contentType: "application/json; charset=utf-8", success: function (result) { alert("successful!" + result.d); } }) 

Ya que estás usando jQuery, ejecuta estas pruebas para la respuesta:

 var ID = 45; var x = "{sendData: ID}"; alert(jQuery.isPlainObject(x)); // false var y = { sendData: ID}; alert(jQuery.isPlainObject(y)); // true 

Aquí está el jsFiddle:

http://jsfiddle.net/3ugKE/

Usted está pasando en ‘ID’ como una cadena en lugar de una variable. Todo lo que necesita hacer es eliminar las comillas alrededor de su objeto de datos.

Lecturas adicionales sobre objetos JSON y JavaScript:

http://www.json.org/

http://www.w3schools.com/js/js_objects.asp

Puedes usar este código:

 $.ajax({ type: "post", url: "Playground.aspx/childBind", data: JSON.stringify({sendData: ID}), contentType: "application/json; charset=utf-8", dataType: "json", success: function (result) { alert("successful!" + result.d); } })