2009-06-04 12 views
7

ho una domanda in JQuery..I m utilizzando $.ajax() nel mio codice (Function 1) per inviare il fieldname e il numero di sequenza al ctrller che ottiene i suoi dati dal $_POST['name'] e $_POST['sequenceno'] e aggiorna il nomecampo in la tabella con sequenza non data..E genera il pannello di visualizzazione di anteprima con i campi inseriti .. Ora sto provando a cambiare il nome del campo di nuovo tat è Ora quando clicco sui campi del pannello di visualizzazione generato, le impostazioni corrispondenti si apriranno e cercherò di cambiare il nome del campo ora (Function 2)Stesso Ajax chiamato twice..JQuery

Sia Function1 e Function2 sono gli stessi ..nel il Function1 Sto inviando il fieldname e la sequenza non

Nel Funciton 2, voglio inviare lo stesso nome di campo e (ma l'altro valore) sequenceno ..

Ma in Function1 (sequenceno è il valore del contatore) Mentre nel Function2 (sequenceno è il div id cliccato (pannello dello schermo))

come posso fare uso dello stesso func sia ..O ho potuto essere necessario utilizzare funcs separati ..

anche io provato con 2 funzioni separate con URL diversi ma non aggiornati correttamente

mio codice è

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

Ora quando clicco sul panorama 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 

Ma ora se cerco di cambiare il nome di campo ancora una volta sto scrivendo un'altra funzione POST editsettings ma l'esecuzione arriva all'interno di Func1 (cambiando inizialmente) invece di Func2 (cambiando di nuovo il nome di campo) ... Per favore, nessuno deve rispondere alla domanda ... Nota: $(".TextFieldSettings #fieldTitle").change() viene utilizzato due volte all'interno del mio pr .. Potrebbe essere a causa di questo l'aggiornamento non funziona

+1

Quale parte è in realtà la domanda qui? Vuoi sapere se puoi avere una singola funzione riutilizzabile rispetto a due funzioni diverse? – Fenton

+0

Due diverse funzioni() Ma entrambi i nomi sono come $ (". TextFieldSettings #fieldTitle"). Change (function() {}); Stessa cosa ma diverso – useranon

risposta

8

Sembra che il problema sia che entrambi i gestori di eventi stiano sparando e che tu voglia licenziare solo quest'ultimo.

La funzione jQuery .change() aggiunge un gestore di eventi all'evento di modifica. Non sostituisce quelli esistenti. Se si desidera rimuovere il gestore precedente, è necessario qualcosa del tipo:

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

prima di collegare un nuovo gestore.

Si prega di notare che non sono sicuro che funzioni (l'ho appena trovato dai documenti API) e non posso testarlo proprio ora. Tuttavia, l'idea generale è che se si desidera che un gestore di eventi smetta di rispondere a un evento, è necessario rimuovere il gestore.

+0

hi, ho usato la cosa di unbind nel mio codice prima di quel secondo cambiamento ... Ora quando ho usato il mio secondo cambiamento, il suo funzionamento..Ma se provo a cambiare/usare il primo cambio ora il mio primo cambiamento seguito dal secondo cambiamento è anche invocato ... Ma ho bisogno solo del mio primo ad essere invocato ... In realtà il mio primo cambiamento è creare un campo inizialmente .. Il mio secondo cambiamento è modificare le impostazioni del campo già generato .. Cosa sto provando ora è .. Dopo modificare le impostazioni di campo di qualsiasi campo ... Posso creare un nuovo campo (cioè posso creare un nuovo campo ora) ... – useranon

+1

Sembra che ciò che dovresti fare è rendere il gestore delle modifiche una singola funzione, e in quella funzione, decidere quale azione intraprendere in base alle condizioni. In questo modo, non dovrai separare nulla. – Rytmis

5

Sei sicuro di non includere lo stesso script due volte?Per esempio:

Viewstart:

Scripts/jquery-1.6.1.js 

Parziale vista:

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

ho avuto lo stesso problema e ho risolto cancellando il min-versione.

Spero che questo possa essere d'aiuto.

2

Ho un altro caso. Ho ricevuto due volte posta ajax quando leghiamo clic su un pulsante. È causato da Ho due ID con lo stesso nome, quindi il trigger viene rilevato due volte.

+0

Questa potrebbe non essere una risposta reale ma ha funzionato per me. :) – darwindeeds

0

Sto lavorando a un progetto che utilizza il servizio Web Amazon EC2. Sto caricando un file di grandi dimensioni (fino a 150 MB). Usa Ajax sul front-end. E molla MVC sul back-end. Il mio problema è il metodo "uploadFile()" del controller Spring chiamato due volte. Ho impostato un punto di interruzione nel mio javascript, il metodo javacript non ha chiamato due volte. Ciò si verifica solo sull'istanza AWS, non sul mio locale. Ed è circa 90 secondi tra la chiamata al metodo uploadFile(). Quindi il callback ajax ottiene l'errore. StatusCode = 0, errore = "" Firefox Firebug dice "abortito" Chrome ispezionare mi dà "rete :: ERR_EMPTY_RESPONSE"

ho pensato che potrebbe essere un po 'dove ajax chiamata backend due volte.

Ho cercato molte soluzioni su StackOverflow. come
1./aggiungere e.preventDefault() e e.stopImmediatePropagation(); 2 ./o cambia maxSwallowSize in tomcat/confg/server.xml 3. $ ("# uploadFileForm"). Unbind ('submit'). Submit (funzione (e) 4. cambia async su true e aggiungi valore timeout a ajax metodo tipo: 'POST', timeout: 60000, asincrona:. vera,

Nessuno di lavoro di cui sopra

Finalmente ho soltion che dal cambiamento timeout inattivo in ELB a 600 secondo e il mio controller. non chiama due volte

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

Prima di tutto voglio ringraziare tutte le persone che rispondono alle domande su StackOverflow, che aiutano molto, molto, molto. Le soluzioni non sono sbagliate, non solo per il mio caso. E questo problema mi porta 3 giorni. Spero possa aiutarti a porre domande. "ajax fire/call twice" "Spring controller call twice" "Ajax timeout"