2009-06-08 8 views
15

No soy muy bueno en jQuery, pero decidí usar el complemento jEditable para mi sitio porque pensé que se veía bien y resolvió el propósito. Sin embargo, estoy un poco enredado ahora.cómo salir de jquery (jeditable) mess

Utilicé este complemento para editar datos y los datos editados se envían a la base de datos y algunos campos se actualizan. el procedimiento Almacenado que actualiza estos campos devuelve algunos datos. Me gustaría que me devolvieran esta información. Me gustaría ver primero los datos devueltos en una declaración de "alerta", luego puedo tomarlos desde allí.

El método de devolución de llamada de este complemento solo tiene valor y configuración.

¿Hay alguna forma de recuperar datos desde el servidor mientras se usa este complemento?

Respuesta

3

Es la URL a la que envía las actualizaciones (que será una especie de página dinámica como PHP, JSP, un servlet Java, etc.) al agregar el valor devuelto del procedimiento almacenado a la respuesta? Si es así, esperaría que los datos aparezcan en el campo "valor" que pasan a la devolución de llamada.

Cuando uso la demostración jEditable en línea, la respuesta solo incluye el texto actualizado, pero eso es una función del código PHP particular que están usando y no tiene nada que ver con el código jEditable javascript.

0

Parece que jEditable es un envoltorio de los métodos de jquery ajax. No debería ser demasiado difícil reemplazar todas sus llamadas editables con llamadas que usan el método ajax nativo de jquery.

Puede reemplazar la devolución de llamada de jEditable llamada 'devolución de llamada' con 'éxito', que es el nombre de la devolución de llamada en la función ajax de jquery.

14

He hecho exactamente esto para mi sitio. Esto debería ayudarte a comenzar.

$("#editable_text").editable(submitEdit, { 
      indicator : "Saving...", 
      tooltip : "Click to edit...", 
      name : "Editable.FieldName", 
      id : "elementid", 
      type : "text", 
}); 
function submitEdit(value, settings) 
{ 
    var edits = new Object(); 
    var origvalue = this.revert; 
    var textbox = this; 
    var result = value; 
    edits[settings.name] = [value]; 
    var returned = $.ajax({ 
      url: "http://URLTOPOSTTO", 
      type: "POST", 
      data : edits, 
      dataType : "json", 
      complete : function (xhr, textStatus) 
      { 
       var response = $.secureEvalJSON(xhr.responseText); 
       if (response.Message != "") 
       { 
        alert(Message); 
       } 
      } 
      }); 
    return(result); 
} 

necesita devolver una respuesta JSON de la forma

{ "mensaje" = "foo"}

Y que va a abrir la alerta.

+0

+1 ¿Es posible enlazar el botón de enviar al botón de creación propia? – Roylee

+0

Minic nitpick, pero esta respuesta Json no es * bastante * Json ... 's/= /: /' :-) – mgilson

9

He estado trabajando en ASP clásico tratando de resolver este problema también, y descubierto otros como yo puede terminar aquí también. Así es como yo he resuelto este problema en ASP clásico:

servidor que ha fallado la validación ... respuesta de whatever.asp

<% 
response.status "406 Not Acceptable" 
response.write "error message here" 
response.end 
%> 

Cualquier mensaje de error whatever.asp envió se puede acceder a través onerror: , y el campo se restablecerá al valor original.

$("#editable_text").editable("whatever.asp", { 
    indicator : "Saving...", 
    tooltip : "Click to edit...", 
    type : "text", 
    onerror: function (settings, original, xhr) { 
     original.reset(); 
     //do whatever you want with the error msg here 
     alert(xhr.responseText); 
    }  
}); 

(y si el valor pasa la validación del servidor, solo responde.escribir lo que el valor actualizado es)

+1

+1 por mencionar onerror, que funciona, pero no parece estar documentado. Sin embargo, creo que un 403 sería más apropiado que un 406, ya que el 406 es específicamente sobre el encabezado Acepta. – Brilliand

0

La documentación dice que el primer parámetro de la función 'callback' es el "valor":

'callback': function (value, settings) { 
... 

Lo que hace la documentación no decir es que el "valor" aquí es lo que sea que el servidor escriba. No está limitado al valor bruto. Puedo enviar de vuelta una estructura JSON codificados, por lo que la primera línea de mi función de devolución de llamada es la siguiente:

var updateInfo = JSON.parse(value); 

Y entonces me tire de los campos según sea necesario de la estructura updateInfo.