2009-06-04 6 views
7

Ich habe eine Frage in JQuery..I m $.ajax() in meinem Code verwendet (Function 1) die Feldnamen und die laufende Nummer der ctrller zu senden, die ihre Daten von $_POST['name'] und $_POST['sequenceno'] erhalten und aktualisieren die Feldnamen in die Tabelle mit der Sequenz no angegeben..Und generiert die Vorschau Anzeige Panel mit den eingefügten Feldern .. Jetzt versuche ich die Änderung des Feldnamens wieder tat ist Jetzt wenn ich auf die generierten Anzeigefeldfelder klicke, werden die entsprechenden Einstellungen geöffnet und ich werde versuchen, den Namen des Feldes jetzt (Function 2)Samt Ajax genannt twice..JQuery

Beide Function1 und Function2 sind gleiche ..In der Function1 zu ändern Ich bin die Feldnamen zu senden und die Sequenz keine

Im Funciton 2, ich mag die gleichen Feldnamen senden und zu (aber das anderen Wert) sequenceno ..

Aber in Function1 (sequenceno ist der Zählerwert) Während in der Function2 (sequenceno ist die angeklickt div id (Display Panel))

Wie kann ich von der gleichen func sowohl ..oder konnte ich separaten funcs verwenden müssen machen ..

Selbst i versucht mit 2 separaten Funktionen mit verschiedenen URLs aber nicht korrekt aktualisiert

Mein Code ist

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

Jetzt Wenn ich die Ansicht DisplayPanel klicken

 $("#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 

Aber jetzt, wenn ich versuche, den Feldnamen zu ändern, wieder schreibe ich eine andere POST Funktion editsettings aber die Ausführung kommt innerhalb Func1 (Ändern anfänglich) anstelle von Func2 (im Feldname wieder ändern) ... Bitte jemand raus die Antwort für diese .... Hinweis: $(".TextFieldSettings #fieldTitle").change() wird zweimal in meinem prg verwendet .. Kann sein, weil die update schief geht

+1

Welcher Teil ist eigentlich die Frage hier? Möchten Sie wissen, ob Sie nur eine einzige wiederverwendbare Funktion gegenüber zwei verschiedenen Funktionen haben können? – Fenton

+0

Zwei verschiedene Funktionen() Aber beide Namen sind wie $ (". TextFieldSettings #fieldTitle"). Change (function() {}); Die gleiche Sache, aber anderer Zweck – useranon

Antwort

8

Es scheint, als ob das Problem ist, dass beide Ihre Event-Handler feuern, und Sie nur wollen, dass die letztere zu feuern.

Die Funktion jQuery .change() fügt dem Änderungsereignis einen Ereignishandler hinzu. Es ersetzt keine bestehenden. Wenn Sie den vorherigen Handler entfernen möchten, benötigen Sie Folgendes:

bevor Sie einen neuen Handler anhängen.

Bitte beachten Sie, dass ich nicht sicher bin, ob das funktioniert (ich habe es gerade von der API-Dokumentation gefunden) und ich kann es jetzt nicht testen. Die allgemeine Idee ist jedoch, dass Sie den Handler entfernen müssen, wenn ein Ereignishandler nicht mehr auf ein Ereignis reagieren soll.

+0

Hallo, Ich habe die unbind Sache in meinem Code vor dieser zweiten Änderung verwendet ... Nun, wenn ich meine zweite Änderung verwendet, funktioniert es .. Aber wenn ich versuche, ändern/mit der ersten Änderung Jetzt wird auch meine erste Änderung, gefolgt von der zweiten Änderung, aufgerufen ... Aber ich brauche nur meine erste, die aufgerufen wird ... Eigentlich ist meine erste Änderungsfunktion, zunächst ein Feld zu erstellen. Meine zweite Änderung besteht darin, die Einstellungen der Feld bereits generiert..Was ich jetzt versuche ist ..Nach Bearbeitung der Feldeinstellungen eines Feldes ... Ich kann ein neues Feld erstellen (das heißt, ich kann jetzt ein neues Feld erstellen) ... – useranon

+1

Es klingt wie, was Sie tun sollten, ist der Change-Handler eine einzige Funktion, und in dieser Funktion entscheiden Sie, welche Aktion basierend auf den Bedingungen zu ergreifen. Auf diese Weise müssen Sie nichts lösen. – Rytmis

5

Sind Sie sicher, dass Sie das gleiche Skript nicht zweimal eingeben?Zum Beispiel:

Viewstart:

Scripts/jquery-1.6.1.js 

Teilansicht:

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

habe ich das gleiche Problem und ich löste es durch die min-Version zu löschen.

Ich hoffe, das wird helfen.

2

Ich habe einen anderen Fall. Ich habe zweimal post ajax gesendet, wenn bind auf eine Schaltfläche klickt. Es verursacht durch zwei IDs, die denselben Namen haben, also der Trigger zweimal erkannt.

+0

Dies könnte keine tatsächliche Antwort sein, aber es hat für mich funktioniert. :) – darwindeeds

0

Ich arbeite an einem Projekt, das Amazon Web Service EC2 verwendet. Ich lade eine große Datei hoch (bis zu 150 MB). Verwenden Sie Ajax am Frontend. Und spring MVC auf Backend. Mein Problem ist Spring Controller "uploadFile()" -Methode zweimal aufgerufen. Ich habe einen Haltepunkt in meinem Javascript gesetzt, javascript Methode wird nicht zweimal aufgerufen. Dies geschieht nur auf der AWS-Instanz, nicht auf meinem lokalen. Zwischen dem uploadFile() -Methodenaufruf liegen ungefähr 90 Sekunden. Dann der Ajax-Rückruf erhalten Fehler. Statuscode = 0, Fehler = "" Firefox Firebug sagt "abgebrochenen" Chrome inspizieren gibt mir "net :: ERR_EMPTY_RESPONSE"

ich, obwohl es zweimal, wo einige Ajax-Aufruf Backend sein könnte.

Ich suche viele Lösung auf Stackoverflow. wie
1./füge e.preventDefault() und e.stopImmediatePropagation() hinzu; 2 ./oder maxSwallowSize in tomcat/confg/server.xml ändern 3. $ ("# uploadFileForm"). Unbind ('submit'). Submit (function (e) 4. Ändern Sie async in true und fügen Sie einen Zeitüberschreitungswert hinzu auf ajax-Methode Typ: 'POST', Timeout: 60000, async. wahr,

Keines der oben Arbeit

Finaly soltion ich es durch Leerlaufzeitänderung zu 600 Sekunden in ELB Und mein Controller. ruft nicht zweimal auf

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

Zuerst möchte ich danke an alle Leute, die Frage auf Stackoverflow beantworten, die viel, viel, viel helfen. Die Lösungen sind nicht falsch, nur nicht für meinen Fall. Und dieses Thema dauert 3 Tage. Ich hoffe, es kann dir helfen, Fragen zu stellen. "Ajax Feuer/Anruf zweimal" "Spring Controller Anruf zweimal" "Ajax Timeout"