2016-03-18 15 views
-1

Ich habe mehrere Seiten, die mit gültigen GET Daten angekommen sind auf, wie http://website.com/?id=12345HTML Form zu entfernen? Get = info auf POST Submit?

ich ein generisches HTML-Formular, das auf viele verschiedenen Seiten mit PHP „require“ gezogen wird und POST einreicht werden. Unabhängig davon, auf welcher Seite sich dieses Formular befindet, sollte es immer an dieselbe Seite zurückgeben. Nachdem das Formular abgeschickt wurde, möchte ich jedoch die? Id = 12345 entfernt werden.

So, zum Beispiel, wenn der Benutzer auf http://website.com/new.php?id=12345 ist, sollte es zurück auf http://website.com/new.php posten. Wenn der Benutzer auf http://website.com/old.php?id=12345 ist, dass gleiche Form sollte es Post zurück zu old.php

Bisher die beste Lösung, ich fand, war die Form als solche stylen:

<form action="?" method="POST"> 

Welche werden alle Links zu http://website.com/new.php ändern ? oder http://website.com/old.php? Das ist sehr nah, aber nicht perfekt.

Wie sich herausstellt, fand ich endlich die Lösung für mein Problem, indem sie mit Hilfe von JavaScript:

url = location.href; 
qindex = url.indexOf("?"); 

Dies kann ziehen, was auch immer in der Adressleiste als String und den Index des ersten finden? Kennzeichen. Von dort:

if(qindex != -1) 

sagt mir, dass es ein? mark

var plainUrl = url.substring(0, qindex); 

bekommen können, als String, alles bis zu den? markieren, aber nicht danach. Schließlich:

Wird die Adressleiste in die einfache URL umschreiben, nicht einschließlich der? oder was auch immer danach kommt und ohne den Browser umzuleiten.

+1

Nein, das ist nicht möglich, allein mit Hilfe von HTML. Aber ein Formular, das an die gleiche Adresse zurückschickt, würde höchstwahrscheinlich eine serverseitige Sprachverarbeitung der gesendeten Daten haben, richtig? Daher sollte es möglich sein, die Aktion dynamisch auf die aktuelle URL zu setzen - bei Bedarf auch ohne den unerwünschten GET-Parameter. – CBroe

+0

CBroe bedeutet, dass Ihr Vorschlag - "reines HTML-Posting zurück zu sich selbst, ohne GET zu verwenden" - nicht möglich ist, anstatt den Vorschlag von j08691. Siehe auch die erste Antwort hier: http://stackoverflow.com/questions/13650408/hide-variables-passed-in-url für einen interessanten Ansatz. – Hektor

+0

Haben Sie ein leeres 'action' Attribut versucht? 'action =" "' –

Antwort

1

Da Ihre Seite keiner serverseitigen Verarbeitung unterzogen wird, können Sie durch eine Kombination der folgenden zwei Tricks erreichen, was Sie wollen. Erstens ändern sich Ihre speziellen Abfragezeichenfolgeflag auf einen Hash, der ohne das Auslösen einer Seite neu laden danach direkt bearbeitet werden kann:

http://yourdomain.com/page.html#search=value

Ändern Sie dann solch ein Skript wie das zu tun, was Sie tun wollen, nach der Abfrage String übergeben in

 <script type='text/javascript'> 
      // grab the raw "querystring" 
      var query = document.location.hash.substring(1); 

      // immediately change the hash 
      document.location.hash = ''; 

      // parse it in some reasonable manner ... 
      var params = {}; 
      var parts = query.split(/&/); 
      for (var i in parts) { 
      var t = part[i].split(/=/); 
      params[decodeURIComponent(t[0])] = decodeURIComponent(t[1]); 
      } 

      // and do whatever you need to with the parsed params 
      doSearch(params.search); 
     </script> 

jetzt können Sie die Query-String-Suffix auf folgende Weise löschen.

Wie an anderer Stelle detailliert beschrieben, und zwar hide variables passed in URL, Es ist möglich, JavaScript's History API in modernen Browsern zu verwenden.

history.replaceState({}, null, "/index.html"); 

Dadurch wird Ihre URL als/index angezeigt.html, ohne die Seite neu zu laden

Dieses kleine Juwel im Detail hier erklärt:

https://developer.mozilla.org/en-US/docs/Web/API/History_API

+0

Das ist wirklich cool! Um es klarzustellen, das Formular selbst wird jedoch remote auf PHP-Seiten geladen, die das "get" -Formular verwenden, aber nachdem die Formulare gesendet wurden, sollten sie wieder auf die gleiche Seite schreiben. Es wird eine Server-seitige Verarbeitung geben, die von der anfänglichen & ldquor; get "abhängt, und auch wenn das Formular gesendet wird, um es selbst zu posten. – redux

+0

Ich bin mir nicht ganz sicher, was das Problem ist. Warum willst du das "? Get = something" einfach aus dem Link streichen? Wie auch immer, hoffentlich wird diese arkane Lösung, die auf Ihre Zwecke zugeschnitten ist, Ihnen dabei helfen. – Hektor

+0

Hektor, in meinem Fall, nachdem die Person eingibt, möchte ich ihre Einreichung gegen eine Datenbank überprüfen. Wenn sie irgendwelche Probleme mit dem Formular haben, kann ich sie mit einem "error = name_too_long" zurück zum Formular schicken. Sobald das Formular erneut gesendet wird, möchte ich nicht, dass es hochgeladen wird: error = name_too_long oder die Seite denkt, dass ein Problem vorliegt – redux