2009-06-04 24 views
7

tengo una pregunta en JQuery..I m usando $.ajax() en mi código (Function 1) para enviar el nombre del campo y el número de secuencia a la ctrller la que obtiene sus datos por $_POST['name'] y $_POST['sequenceno'] y actualiza el nombre de campo en la tabla con la secuencia no determinada..Y genera el Panel de visualización de vista previa con los campos insertados ... Ahora intento cambiar el nombre del campo de nuevo tat Ahora cuando hago clic en los campos del panel de visualización generados, se abrirán las configuraciones correspondientes y voy a tratar de cambiar el nombre del campo ahora (Function 2)mismo Ajax llamada twice..JQuery

Tanto Function1 y Function2 son los mismos ..En el Function1 Estoy enviando el nombre del campo y la secuencia sin

En el Funciton 2, quiero enviar el mismo nombre de campo y (pero el otro valor) sequenceno ..

Pero en Función1 (sequenceno es el valor del contador) Mientras que en el Función2 (sequenceno es el hecho clic div id (panel de visualización))

¿Cómo puedo hacer uso de la misma para ambos func ..o podía Tengo que utilizar funcs separados ..

Incluso i intentado con 2 funcs separados con diferentes URL pero no se actualizó correctamente

Mi código es

//This is what i insert the field initially 

       $(".TextFieldSettings #fieldTitle").change(function(){ 
      fieldname=$(".TextFieldSettings #fieldTitle").val(); 
    $.ajax({ 
      type: "POST", 
      url: "./server", 
     data: "name="+fieldname+"&sequenceno="+counter, 

       success: function(msg){ 
         }//success 
      });//ajax 

    });//change 

//After inserting to get the updated values in JSON format 

    var htm = $.ajax({ 
     type: "GET", 
      url: "./viewforms", 
     async: false 
     }).responseText; 
     var myObject = eval('(' + htm + ')'); 


    gettype=myObject.attributes[0]["type"]; 
    getlabel=myObject.attributes[0]["labels"]; 

    //showing in my DisplayPanel view 

      $("#labelstr"+counter+"").html(getlabel); 
    });//change 

Ahora Cuando hago clic en la vista DisplayPanel

 $("#displayPanel div").live("click", function(){ 
          div_id=$(this).attr("id"); 

           var htm = $.ajax({ 
            type: "GET", 
            url: "./getattributes/"+div_id+"", 
            async: false 
           }).responseText; 
           var myObject = eval('(' + htm + ')'); 


           gettype=myObject.attributes[0]["type"]; 
           getlabel=myObject.attributes[0]["labels"]; 
           getsize=myObject.attributes[0]["size"]; 

    if(gettype=='Text') 
    { 
    $(".TextFieldSettings").show(function(){ 
    $(".TextFieldSettings #fieldTitle").val(getlabel);//showing the updated value 
          if(getsize=='100') 
          { 
      $("#fieldSize option:contains(Small)").attr("selected",true); 
          } 
          else if(getsize=='200') 
          { 
     $("#fieldSize option:contains(Medium)").attr("selected",true); 
         } 
       else 
      { 
      $("#fieldSize option:contains(Large)").attr("selected",true); 
      } 
//Again i m changing the fieldname 


     $(".TextFieldSettings #fieldTitle").change(function(){ 
     fieldname=$(".TextFieldSettings #fieldTitle").val(); 


           alert(div_id); 
             $.ajax({ 
              type: "POST", 
              url: "./editsettings", 



                     data: "name="+fieldname+"&sequenceno="+div_id, 
              success: function(msg){ 

              }//success 
              });//ajax 


});//change in text value later*/ 



        });//show 
        }//if type = TEXT 

       });//displaypanel Div clicked 

Pero ahora si trato de cambiar el nombre del campo nuevo que estoy escribiendo otra función de POST editsettings pero la ejecución viene dentro de Func1 (cambiando inicialmente) en lugar de Func2 (cambiando de nuevo en el nombre de campo) ... Por favor, cualquiera puede obtener la respuesta para esto .... Nota: $(".TextFieldSettings #fieldTitle").change() se usa dos veces dentro de mi prg ..Puede ser por esto la actualización va mal

+1

¿Qué parte es realmente la pregunta aquí? ¿Desea saber si puede tener una única función reutilizable frente a dos funciones diferentes? – Fenton

+0

Dos funciones diferentes() Pero ambos nombres son como $ (". TextFieldSettings #fieldTitle"). Change (function() {}); Lo mismo pero con un propósito diferente – useranon

Respuesta

8

Parece que el problema es que ambos controladores de eventos están disparando, y usted solo quiere que este último dispare.

La función jQuery .change() agrega un controlador de eventos al evento de cambio. No reemplaza a los existentes. Si desea eliminar el controlador anterior, necesita algo como:

$(".TextFieldSettings #fieldTitle").unbind('change') 

antes de adjuntar un nuevo controlador.

tenga en cuenta que no estoy seguro de que esto funcione (lo acabo de encontrar de los documentos de la API) y no puedo probarlo ahora mismo. Sin embargo, la idea general es que si desea que un controlador de eventos deje de responder a un evento, debe eliminar el controlador.

+0

hola, he utilizado la opción de desvinculación en mi código antes de ese segundo cambio ... Ahora cuando utilicé mi segundo cambio, está funcionando ... Pero si trato de cambiar/usar el primer cambio ahora también se invoca mi primer cambio seguido del segundo cambio ... Pero solo necesito invocar a mi primero ... En realidad, mi primer cambio de función es crear un campo inicialmente ... Mi segundo cambio es editar la configuración del campo ya generado ... Lo que estoy intentando ahora es ... Después de editar la configuración de campo de cualquier campo ... Puedo crear un nuevo campo (es decir, puedo crear un nuevo campo ahora) ... – useranon

+1

Parece que lo que debe hacer es hacer que el manejador de cambios tenga una sola función, y en esa función, decidir qué acción tomar según las condiciones. De esta forma, no tendrás que desvincular nada. – Rytmis

5

¿Estás seguro de que no estás incluyendo el mismo script dos veces?Por ejemplo:

Viewstart:

Scripts/jquery-1.6.1.js 

Vista parcial:

<script src="@Url.Content("~/Scripts/jquery-1.6.1.min.js")" type="text/javascript"></script> 

I tiene el mismo problema y lo resolvió mediante la supresión de la min-versión.

Espero que esto ayude.

2

Tengo otra caja. Recibí dos veces enviar mensaje ajax cuando hice clic en un botón. Esto se debe a que tengo dos identificadores que tienen el mismo nombre, por lo que el disparador se detectó dos veces.

+0

Esto podría no ser una respuesta real, pero funcionó para mí. :) – darwindeeds

0

Estoy trabajando en un proyecto que utiliza el servicio web Amazon EC2. Estoy cargando un archivo grande (hasta 150 MB). Usa Ajax en el frente. Y Spring MVC en back-end. Mi problema es el método "uploadFile()" del controlador Spring llamado dos veces. Establecí un punto de interrupción en mi javascript, el método javacript no se llama dos veces. Esto solo ocurre en la instancia de AWS, no en mi local. Y es alrededor de 90 segundos entre la llamada al método uploadFile(). Luego, la devolución de llamada ajax obtiene un error. Statuscode = 0, error = "" Firefox Firebug dice "abortado" Chrome inspeccionar me da "red :: ERR_EMPTY_RESPONSE"

que aunque podría ser en algún lugar ajax llamada backend dos veces.

Busco muchas soluciones en stackoverflow. como
1./add e.preventDefault() y e.stopImmediatePropagation(); 2 ./o cambiar maxSwallowSize en tomcat/confg/server.xml 3. $ ("# uploadFileForm"). Unbind ('submit'). Submit (función (e) 4. cambiar async a verdadero y agregar valor de tiempo de espera a ajax tipo de método : 'post', tiempo de espera: 60000, asíncrono:. verdadera,

Ninguno de trabajo por encima

Finaly me Soltion que por el cambio de tiempo de espera de inactividad en ELB 600 segundo y mi controlador. no se llama dos veces

http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/config-idle-timeout.html https://aws.amazon.com/blogs/aws/elb-idle-timeout-control/

Primero quiero agradecer a todas las personas que respondieron la pregunta sobre stackoverflow, que ayudan mucho, mucho, mucho. Las soluciones no son incorrectas, simplemente no para mi caso. Y este problema me lleva 3 días. Espero que pueda ayudarte a preguntarte. "ajax disparar/llamar dos veces" "Controlador de primavera llamar dos veces" "Tiempo de espera Ajax"

Cuestiones relacionadas