2009-03-17 8 views
4

Est-il possible de faire une telle réponse HTTP, que le navigateur l'ignore et continue d'afficher la page affichée précédemment?Répondre pour que le navigateur ne fasse rien - est-ce possible?

Je veux dire le scénario suivant:

a) l'utilisateur clique sur quelque chose

b) certains POST va au serveur (ou GET, mais collons avec POST comme plus intéressant)

c) serveur décide que, pour une raison quelconque, il ne veut pas envoyer la réponse à ce moment

serveur

d) envoie de réponse spécifiquement conçu

e) navigateur ne montre pas la page d'erreur, ne montre pas la page vide, ne redirige pas n'importe où, ne pas recharger - continue à montrer ce qu'il montre comme si l'utilisateur n'a jamais soumis le formulaire

PS Bien sûr, il peut être enveloppé avec AJAX, mais je me demande si bare-bones solution non javascript est possible

Répondre

12

Essayez de renvoyer HTTP 204 No Content. Voir la description de ce code de réponse dans RFC 2616 (Hypertext Transfer Protocol -- HTTP/1.1) où il est dit:

Si le client est un agent utilisateur, il ne devrait pas changer son point de vue du document de ce qui a fait la demande à envoyer. Cette réponse est principalement destinée à permettre l'entrée d'actions aient lieu sans provoquer un changement à l'actif de l'agent utilisateur vue document, bien que toute métainformations nouvelle ou mise à jour doit être appliquée à l' document actuellement en vue active de l'agent utilisateur.

+0

Nouveau tour merci. – JoshBerke

+0

Merci, c'est ce que je cherchais. – Mekk

+1

Et c'est pourquoi il n'y a pas de questions stupides. –

1

Cette méthode est généralement appelée AJAX. Il nécessite Javascript et la fonction XMLHttpRequest.

Edit: Remarqué votre 'PS' au fond. Le 204 response suggéré dans une autre réponse semble être une solution non-Javascript valide.

1

Supposons que vous faites cela.

Que fait l'utilisateur? Soumettre le formulaire à nouveau, bien sûr.

Plusieurs fois. Ensuite, ils décident que votre site est cassé, et partent.

+0

Toujours dans certains scénarios d'erreur, voici ce que je trouve utile ... – Mekk

+0

Je suis curieux. Pourquoi voudriez-vous ne donner aucun retour quoi que ce soit? Ne serait-il pas préférable de simplement masquer/griser le bouton de soumission dans de tels cas? Quel est l'avantage de cacher le processus de l'utilisateur, à moins que vous ne soyez pas bon ... hmmm. – MarkusQ

-2

Non. Le protocole HTTP consiste en un cycle de demande-réponse. Le serveur ne peut pas décider de ne pas répondre (c'est possible, mais cela brise le protocole et commet une erreur).

+0

Cependant, il existe un code de réponse HTTP défini qui indique au navigateur de * ne * pas * mettre à jour ou modifier ce qu'il affiche actuellement. – Eddie

0

Je pense que vous avez besoin de Javascript pour le faire, vous pouvez envoyer la demande et en fonction de la réponse du serveur le Javascript peut faire une fausse déclaration, en évitant l'actualisation/rechargement de la page réelle.

Je ne sais pas la réponse 204, mais peut-être de cette façon vous pouvez le faire à partir du côté serveur.Une autre façon de le faire (aussi Javascript) est de faire un retour faux, juste après l'envoi de la requête, et en fonction de la réponse du serveur (avec ajax) vous pouvez modifier la page actuelle ou envoyer l'utilisateur à une autre page.