2009-10-26 9 views
21

Es ist wirklich schwer, die beliebige Kombination von Stichwörtern in der Suchmaschine zu diesem Thema, weil es von den meisten populären Entwickler verwendet wollte eine benutzerdefinierte Autovervollständigung von Ajax.Browser Autocomplete/gespeichert Formular nicht in Ajax Anfrage

Die meisten Entwickler suchen über die benutzerdefinierte Autocomplete, um das Ergebnis von db von Ajax zu erhalten oder über die Browser-Autocomplete aus Sicherheitsgründen zu deaktivieren oder sie wollten einen anderen Autocomplete-Extender verwenden.

Allerdings rede ich nicht über die automatische Vervollständigung. Ich finde über einfache normale Browser-Autocomplete oder Browser gespeicherte Form entweder IE oder FF, die wie Dropdown-Auswahl beim Ausfüllen eines Textes in einem Textfeld wirken.

Es ist einfach und normal ein Formular wie Benutzername und Passwort in einem Login-Formular ausfüllen. Nach dem Senden des Formulars (der Formulardatenpost) speichert der Browser die Autovervollständigung oder das Ereignis in FF wird aufgefordert, zusammen mit dem Passwort zu speichern.

Jetzt denken Sie an den Login über Ajax eingereicht. Die Formulardaten werden nicht automatisch von IE oder FF gespeichert, nur weil das Formular nicht per Post gesendet wurde. Ich bin mir ziemlich sicher, dass es wegen Ajax vs Post-Methode ist.

CMS wie DotNetNuke auf diese Weise und es ist wirklich schwer zu mir Benutzername und Passwort für 5 Benutzeranmeldung für Entwicklungszwecke, Ereignis Ich möchte Benutzer eigene Formulardaten im Browser speichern lassen, ohne benutzerdefinierte oder Extender. In einem anderen Beispiel kann der Benutzer die gleiche E-Mail sehen und verwenden, um ein beliebiges E-Mail-Formular über die Website oder Domain zu füllen.

Wie umgehen Sie dies? Hattest du Vorschläge, welche Keywords für die Suche besser geeignet sind?

CallMeLaNN

+0

Im noch für die Lösung gesucht ... – CallMeLaNN

+0

ich hier fast die gleiche Frage gestellt haben: http://stackoverflow.com/questions/9201858/how-to-store-to-browser-auto- complete-auto-fill-wenn-benutzt-ajax-calls-statt-of. Ich möchte eine allgemeine Lösung, nicht eine, die nur in FF funktioniert. – JoeCool

+0

Haben Sie die Antwort gefunden? Ich habe das gleiche Problem. Prost – Mango

Antwort

4

Ich habe das gleiche Problem. Ich konnte es für FireFox lösen, indem ich einen versteckten Iframe hinzufügte, den ich über JavaScript einreichte, bevor ich meine AJAX-Post machte. Ich habe immer noch nichts gefunden, was in Chrome/IE funktioniert.

+0

Chrome 46 endlich behoben sein falsches Verhalten. Siehe https://StackOverflow.com/a/33113374/810109 – mkurz

2

Ich wurde mit dem gleichen Problem konfrontiert und suchte ein wenig. Ich denke, dass die folgende Lösung der bequemste Weg ist, dies zu lösen, wenn Sie eine Login-Seite haben. Wenn wir uns die über ajax übermittelten Anmeldedaten merken, keiner der Browser sich daran erinnert oder die Autocomplate-Funktion für den Benutzernamen und das Passwortfeld anbietet, bitten Sie zusätzlich, sich die Anmeldedaten zu merken. Aber wenn Sie die JavaScript-Funktion submit verwenden (wahrscheinlich ist es nicht mit älteren Versionen von Browsern kompatibel), bietet alle Browser an, den Benutzernamen und das Passwort außer IE zu speichern. Aber ich habe eine andere Javascript-Schwierigkeit für IE gefunden, die es anbietet, Benutzernamen und Passwort zu speichern.

Auf meiner Anmeldeseite habe ich den Benutzernamen und das Passwort bearbeitet und per AJAX - Anfrage an die Server gesendet. Wenn die Anmeldung erfolgreich war, habe ich das Formular mit der folgenden Methode eingereicht Benutzer, dass die Anmeldung fehlgeschlagen ist.

Überprüfen Sie bitte den folgenden Link:

[EDIT]: Link gebrochen ist

Es gibt eine feste Seite zu diesem Thema ist in der gelinkten Seite, kann ich Ihnen nicht geben einen anderen Link, weil meines Rufes. Bitte suchen Sie für das Angebot unten auf der Seite:

Schauen Sie auf der festen Seite.

Natürlich passt dieser Ansatz nicht, wenn Sie einen Login-Bereich auf der Standardseite haben, weil das Formular übermittelt wird. Das flackert die Seite. Ich frage mich, ob jemand eine Idee davon hat?

1

Hier ist ein unaufdringlicher js jQuery-Code, der ein Formular sowohl über Ajax ($ .post-Methode) an ein echtes Backend-Skript als auch an ein Dummy-Skript über einen iFrame übermittelt, damit der Browser die übermittelten Daten speichert automatische Vervollständigung

Dies funktioniert gut unter Chrom. Jede Rückmeldung ist mehr als willkommen!

var formframesindex = 0; 
function onSubmitAjax(evt){ 
    var $form = $(this); 
    var framesubmitting = $form.hasClass('framesubmitting'); 
    var action = $form.attr('action'); 
    var original_action = action; 

    if(!framesubmitting){ 
     $.post(action,$form.serialize()+"&ajax=1", function(responseText,message,request){ 
      formResponseHandler(responseText); 
     }, "json"); 


     formframesindex++; 
     var formframe = $("<iframe name='formframe_id_"+(formframesindex)+"' id='formframe_id_"+(formframesindex)+"' class='formframe' src='/fakeformreceiver.php'></iframe>"); 
     $('body').append(formframe); 
     var target = $form.attr('target'); 
     $form.data('originaltarget',target); 
     $form.data('originalaction',original_action); 
     $form.attr('target','formframe_id_'+formframesindex); 
     $form.attr('action','/fakeformreceiver.php'); 
     $form.addClass('framesubmitting'); 
     $form.submit(); 

    } else { 
     var current_target = $form.attr('target'); 
     var original_action = $form.data('originalaction'); 
     var original_target = $form.data('originaltarget'); 
     var $frame = $('#'+current_target); 
     setTimeout(function(){ 
      if($frame && $frame.length){ 
       $frame.remove(); 
      } 
      $form.attr('action',original_action); 
      $form.attr('target',original_target); 
      $form.removeClass('framesubmitting'); 
     },100); 
    } 
    return framesubmitting; 
} 
+0

Chrome 46 hat sein falsches Verhalten korrigiert - keine "iframe" -Antwicklungen mehr nötig. Siehe https://StackOverflow.com/a/33113374/810109 – mkurz