Domanda

Ho un paio di moduli di ricerca, 1 con ~ 50 campi e l'altro con ~ 100. In genere, come dice la specifica HTML, eseguo ricerche utilizzando il metodo GET poiché non vengono modificati dati. Non ho ancora riscontrato questo problema, ma mi chiedo se presto esaurirò lo spazio URL?

Il limite di Internet Explorer è di 2083 caratteri. Altri browser hanno un limite molto più alto . Sto eseguendo Apache, quindi il limite è di circa 4000 caratteri, che IIS è di 16384 caratteri.

In 100 campi, ad esempio la lunghezza media del nome del campo di 10 caratteri, sono già 5000 caratteri ... fantastico sulla forma del campo 100, non ho ancora avuto errori. (Il 25% dei campi sono selezioni multiple, quindi la lunghezza del campo è molto più lunga.)

Quindi, mi chiedo quali siano le mie opzioni. (Accorciare i moduli non è un'opzione.) Ecco le mie idee:

  • Usa POST. Non mi piace così tanto perché al momento gli utenti possono aggiungere le proprie ricerche ai segnalibri ed eseguirle di nuovo in seguito, una caratteristica davvero interessante.
  • Avere JavaScript attraverso il modulo per determinare quali campi sono diversi da quelli predefiniti, popolare un altro modulo e inviarlo. L'utente ovviamente aggiungerebbe la versione abbreviata ai segnalibri.

Altre idee?

Inoltre, qualcuno sa se la lunghezza è la lunghezza codificata o solo testo normale?

Sto sviluppando in PHP, ma probabilmente non fa differenza.

Modifica: non riesco a rimuovere alcun campo; Non riesco ad abbreviare il modulo. Questo è ciò che il cliente ha richiesto e spesso usano una gamma di campi, nelle diverse categorie. So che è difficile pensare a un modulo che sembra bello con questi molti campi, ma gli utenti non hanno problemi a capire come funziona.

È stato utile?

Soluzione

I tuoi utenti useranno effettivamente tutti i campi 50-100 per fare le loro ricerche? Se ne stanno usando solo alcuni, perché non POST la ricerca tra " tra " pagina quale intestazione () - li reindirizza alla pagina dei risultati con solo i campi modificati dall'utente nell'URL? La pagina dei risultati utilizzerà quindi i valori predefiniti per i campi che non esistono nell'URL.

Altri suggerimenti

Per indirizzare indirettamente la tua domanda, se dovessi affrontare un modulo da 100 campi da compilare su una pagina, molto probabilmente chiuderei il mio browser, sembra un'usabilità completa incubo .

La mia risposta è, se c'è il pericolo che mi sto avvicinando a quel limite per l'uso normale del modulo, probabilmente lo sto facendo in modo sbagliato.

In ordine di preferenza, vorrei

  1. Dividi il modulo e usa un po 'di conservazione dello stato sul lato server
  2. Passa a POST, quindi genera e reindirizza a un URL più breve su POST che si è risolto con lo stesso risultato
  3. Rinuncia;)

In un commento menzioni che molti dei campi "sono nascosti e possono essere aperti come richiesto".

Se sei disposto a scartare un degrado gradevole, puoi sempre effettivamente aggiungere e rimuovere i campi dal modulo, piuttosto che nasconderli e mostrarli: il browser non invierà quelli che non sono inclusi nel modulo.

Questa è una variante di " Marca e modella " moduli utilizzati dalle pagine dell'assicurazione online, ecc.: seleziona la marca, invia nuovamente al server e ottieni l'elenco dei modelli per quel produttore.

Se non ti dispiace usare javascript, allora potresti fargli calcolare la lunghezza della stringa di query e se è troppo lungo, passa a un post. Quindi disporre di una sorta di mapper URL per consentire ai segnalibri di queste ricerche pubblicate.

Usa post e se l'utente aggiunge la ricerca ai segnalibri, salvala in un database e assegnagli un token univoco, quindi reindirizza alla pagina di ricerca usando GET e passando il token come parametro.

TinyURL è un bell'esempio: gli dai un URL molto lungo, lo salva in un DB, ti dà un identificatore univoco per quell'URL e in seguito puoi richiedere l'URL lungo usando quell'identificatore.

In PHP sarebbe qualcosa del tipo:

<?php
if (isset(

Usa post e se l'utente aggiunge la ricerca ai segnalibri, salvala in un database e assegnagli un token univoco, quindi reindirizza alla pagina di ricerca usando GET e passando il token come parametro.

TinyURL è un bell'esempio: gli dai un URL molto lungo, lo salva in un DB, ti dà un identificatore univoco per quell'URL e in seguito puoi richiedere l'URL lungo usando quell'identificatore.

In PHP sarebbe qualcosa del tipo:

<?php
mysql_query('DELETE FROM searches WHERE save_time < DATE_ADD(NOW(), INTERVAL -200 DAY)');
?>

Ed esegui uno script ogni giorno:

<*>GET['token'])) { $token = addslashes(

Usa post e se l'utente aggiunge la ricerca ai segnalibri, salvala in un database e assegnagli un token univoco, quindi reindirizza alla pagina di ricerca usando GET e passando il token come parametro.

TinyURL è un bell'esempio: gli dai un URL molto lungo, lo salva in un DB, ti dà un identificatore univoco per quell'URL e in seguito puoi richiedere l'URL lungo usando quell'identificatore.

In PHP sarebbe qualcosa del tipo:

<*>

Ed esegui uno script ogni giorno:

<*>GET['token']); $qry = mysql_query("SELECT fields FROM searches WHERE token = '{$token}'"); if ($row = mysql_fetch_assoc($qry)) { performSearch(unserialize($row['fields'])); exit; } showError('Your saved search has been removed because it hasn\'t been used in a while'); exit; } $fields = addslashes(serialize(

Usa post e se l'utente aggiunge la ricerca ai segnalibri, salvala in un database e assegnagli un token univoco, quindi reindirizza alla pagina di ricerca usando GET e passando il token come parametro.

TinyURL è un bell'esempio: gli dai un URL molto lungo, lo salva in un DB, ti dà un identificatore univoco per quell'URL e in seguito puoi richiedere l'URL lungo usando quell'identificatore.

In PHP sarebbe qualcosa del tipo:

<*>

Ed esegui uno script ogni giorno:

<*>POST)); $token = sha1(

Usa post e se l'utente aggiunge la ricerca ai segnalibri, salvala in un database e assegnagli un token univoco, quindi reindirizza alla pagina di ricerca usando GET e passando il token come parametro.

TinyURL è un bell'esempio: gli dai un URL molto lungo, lo salva in un DB, ti dà un identificatore univoco per quell'URL e in seguito puoi richiedere l'URL lungo usando quell'identificatore.

In PHP sarebbe qualcosa del tipo:

<*>

Ed esegui uno script ogni giorno:

<*>SERVER['REMOTE_ADDR'].rand()); mysql_query("INSERT INTO searches (token, fields, save_time) Values ('{$token}', '{$fields}', NOW())"); header('Location: ?token='.$token); exit; ?>

Ed esegui uno script ogni giorno:

<*>
  

Inoltre, qualcuno sa se la lunghezza   è la lunghezza codificata o solo testo normale?

La mia ipotesi era per la lunghezza codificata. Ho fatto un semplice test: una textarea e un pulsante di invio a un semplice script PHP.
Caricata la pagina in IE6, incollato del testo francese nella textarea, 2000 caratteri. Se premo il pulsante di invio, niente. Ho dovuto ridurre la lunghezza del testo per poterlo presentare.

In altre parole, il limite di 2083 caratteri è esattamente la lunghezza massima dell'URL trovato nella barra degli indirizzi dopo aver inviato la richiesta GET.

Vorrei scegliere la soluzione JavaScript: al momento dell'invio, analizza il modulo, crea un modulo secondario con gli attributi nascosto e invialo.

Alcune strategie per abbreviare l'output:

  • Come fai notare, puoi già saltare tutti i valori lasciati ai valori predefiniti (nessun campo, nessun valore).
  • Se hai un modulo come quello in Elaborazione ricerca forum puoi raggruppare tutti gli stati della casella di controllo in una sola variabile, ad es. usando la codifica delle lettere.
  • Utilizza gli attributi brevi valore (ad esempio in seleziona )

Nota: se la pagina di ricerca è effettivamente composta da più moduli indipendenti, in cui gli utenti riempiono solo una sezione o un'altra, è possibile creare diversi moduli separati.
Potrebbe non valere per il tuo caso e potrebbe sembrare ovvio, ma vale la pena menzionarlo per la cronaca ... ^ _ ^

Si potrebbe guardare filosoficamente all'invio della ricerca POST come alla creazione di una ricerca salvata (specialmente quando una ricerca è un oggetto tanto complesso come quello che stanno facendo gli utenti). In questo caso, potresti accettare il post per la creazione di una ricerca e quindi reindirizzare utilizzando un GET per recuperare i risultati di ricerca appropriati (post / reindirizzamento / get).

Ciò consentirebbe inoltre agli utenti di contrassegnare i risultati della ricerca (GET) per tornare in qualsiasi momento per rieseguire la ricerca.

Ottieni può avere un vantaggio se i risultati della tua ricerca possono essere condivisi, in caso di richiesta post se invii il link a qualcuno, quella persona non vedrà alcun risultato di ricerca

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top