Permettez-moi d'abord de parler des problèmes que nous avons rencontrés aujourd'hui.
Un processus d'exportation Excel nécessite de transférer une grande quantité de données en arrière-plan après avoir appuyé sur le bouton. L'approche initiale est la suivante :
Copiez le code comme suit :
var actionUrlSetData = "****Action!exportDatas.action"+ "?now=" + new Date().getTime();
window.location.href= actionUrl + "&" + données ;
Les données ci-dessus sont une très longue chaîne.
Il n’y a aucun problème dans Firefox et Google Chrome, mais il ne peut pas être exporté normalement dans IE9 (je ne l’ai pas essayé dans d’autres IE, ça devrait être pareil).
La raison de ce problème est que les différents navigateurs ont des limites de longueur différentes pour l'analyse des URL. IE a la plus petite, donc quelque chose s'est mal passé.
Microsoft Internet Explorer (navigateur)
La limite maximale des URL dans le navigateur IE est de 2 083 caractères. Si ce nombre est dépassé, le bouton d'envoi ne répondra pas.
Firefox (navigateur)
La limite de longueur d'URL pour le navigateur Firefox est de 65 536 caractères.
Safari (navigateur)
La longueur maximale de l'URL est de 80 000 caractères.
Opéra (navigateur)
La longueur maximale de l'URL est de 190 000 caractères.
Google(chrome)
La longueur maximale de l'url est limitée à 8182 caractères
Notez également ici que le serveur WEB a également des restrictions sur la longueur de l'URL ! !
Par conséquent, nous ne pouvons pas utiliser la méthode Get. Nous pouvons uniquement trouver un moyen d'utiliser post pour transmettre la valeur, nous avons donc la solution suivante. Je ne sais pas si elle est appropriée ou non. .En bref, la fonction peut être réalisée.
L'idée est d'utiliser post pour transférer la longue chaîne en arrière-plan, de l'enregistrer dans la session, puis d'utiliser window.location.href dans la méthode de rappel post.
Le code est le suivant :
Copiez le code comme suit :
$.post(actionUrlSetData,mapList,function(){
var actionUrl = chemin + "/***action!exportDatas.action"+ "?now=" + new Date().getTime();
window.location.href= actionUrl + "&" + (données);
});