2009-10-26 9 views
21

Il est vraiment difficile de rechercher la combinaison de mots-clés dans le moteur de recherche à ce sujet car il utilisé par le développeur le plus populaire voulait une autocomplétion personnalisée par ajax.navigateur auto-complétion/formulaire enregistré ne fonctionne pas dans la requête ajax

La plupart des développeurs recherchent la saisie semi-automatique personnalisée pour obtenir le résultat de db par ajax ou comment désactiver la saisie semi-automatique du navigateur pour des raisons de sécurité ou s'ils veulent utiliser un autre extendeur autocomplete.

Cependant, je ne parle pas de la saisie semi-automatique. Je trouve à propos de la simple saisie semi-automatique normale du navigateur ou du navigateur enregistré le formulaire IE ou FF qui agira comme un choix récent de liste déroulante lors du remplissage d'un texte dans une zone de texte.

C'est simple et normal de remplir un formulaire comme nom d'utilisateur et mot de passe dans un formulaire de connexion. Après le formulaire soumis (le formulaire de données post) navigateur va enregistrer la saisie semi-automatique ou l'événement dans FF demandera d'enregistrer avec le mot de passe.

Maintenant, pensez à la connexion envoyée via ajax. Les données de formulaire ne sont pas automatiquement enregistrées par IE ou FF simplement parce que le formulaire n'est pas envoyé par la méthode post. Je suis assez sûr que c'est à cause de la méthode ajax vs post. CMS comme DotNetNuke en utilisant cette façon et c'est vraiment difficile pour moi de saisir le nom d'utilisateur et mot de passe pour 5 connexion utilisateur à des fins de développement, je veux laisser l'utilisateur enregistrer leurs propres données de formulaire dans le navigateur sans aucune coutume ou prolongateur. Par un autre exemple, l'utilisateur peut voir et utiliser le même courriel pour remplir un formulaire électronique quelconque sur un site Web ou un domaine.

Comment contourner ce problème? Avez-vous eu des suggestions sur les mots-clés les plus adaptés à la recherche?

CallMeLaNN

+0

Im toujours à la recherche de la solution ... – CallMeLaNN

+0

J'ai demandé presque la même question ici: http://stackoverflow.com/questions/9201858/how-to-store-to-browser-auto- complete-auto-fill-when-using-ajax-appels-au lieu de. Je veux une solution générale, pas une qui fonctionne seulement dans FF. – JoeCool

+0

Avez-vous trouvé la réponse? Je suis avec le même problème. Cheers – Mango

Répondre

4

J'ai le même problème. J'ai été capable de le résoudre pour FireFox en ajoutant un iframe caché que je soumets via JavaScript avant de faire mon post AJAX. Je n'ai toujours rien trouvé qui fonctionne dans Chrome/IE.

+0

Chrome 46 a finalement corrigé son mauvais comportement. Voir https://stackoverflow.com/a/33113374/810109 – mkurz

2

J'ai été confronté au même problème et j'ai cherché un peu. Je pense que la solution ci-dessous est le moyen le plus pratique pour résoudre ce problème si vous avez une page de connexion. Si nous considérons le login envoyé via ajax, aucun des navigateurs ne se souvient ou n'offre la fonctionnalité autocomplate pour le nom d'utilisateur et le champ de mot de passe pour demander en plus de se souvenir des informations d'identification. Mais si vous utilisez la fonction de soumission javascript (Probablement pas compatible avec les anciennes versions de navigateurs), Tous les navigateurs proposent de sauvegarder le nom d'utilisateur et le mot de passe sauf IE. Mais j'ai trouvé un autre javascript difficile pour IE pour lui proposer d'enregistrer son nom d'utilisateur et son mot de passe.

Dans ma page de connexion, j'ai géré le nom d'utilisateur et mot de passe et les envoyer au serveur par requête ajax et si la connexion est réussie, j'ai soumis le formulaire par la méthode ci-dessous. utilisateur que la connexion a échoué.

S'il vous plaît Vérifiez le lien ci-dessous:

[EDIT]: lien est rompu

Il y a une page fixe sur cette question dans la page liée, je ne peux pas vous donner un autre lien, car de ma réputation. Veuillez rechercher l'offre ci-dessous dans la page:

Regardez la page fixe.

Bien sûr, cette approche ne convient pas si vous avez une section de connexion dans la page par défaut en raison de la soumission du formulaire. Cela provoque le scintillement de la page. Je me demande si quelqu'un a une idée à ce sujet?

1

Voici un code js jQuery discret qui soumettra un formulaire à la fois via ajax (méthode $ .post) à un vrai script backend et aussi à un script fictif via un iFrame, de sorte que le navigateur enregistre les données soumises pour la suite autocomplétion.

Cela fonctionne très bien sous le chrome. Tout commentaire est plus que bienvenu!

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 a corrigé son comportement incorrect - aucune solution de contournement 'iframe' n'est nécessaire. Voir https://stackoverflow.com/a/33113374/810109 – mkurz