2010-01-21 5 views
1

J'essaie d'envoyer des blocs de données à partir de nombreux serveurs sur lesquels mon application est connectée.
En utilisant une source d'image fictive, transmettre mes données en tant que requête GET. (img.gif? Aaa = xxx & bb = yyy ...)
la requête est plusieurs fois trop longue et se coupe.Envoi de données volumineuses au serveur, inter-domaines

Y a-t-il une meilleure façon pour moi d'envoyer le cross-browser de données?

Répondre

0

Ce serait le meilleur si vous avez utilisé la méthode POST lors de l'envoi des données.

var msgSender = new ActiveXObject("Microsoft.XMLHTTP"); 
msgSender.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
msgSender.setRequestHeader("Encoding", "Windows-1257")  
msgSender.open("POST", "http://yourderver/page" ,true); 
msgSender.onreadystatechange = function(){...}; 
var msg = "your very long message goes here"; 

//preparing post data 
var strToSend = "someotherarg=somevalue" + username; 
    strToSend+= "&msg=" + msg; 
strToSend = escape(strToSend); 
msgSender.send(strToSend); 

La solution est encore plus facile, si vous utilisez jQuery - méthode il suffit d'appeler $.post(): http://docs.jquery.com/Ajax/jQuery.post

EDIT: Cependant, cela ne fonctionnera pas inter-domaines, sauf si vous spécifiez 'Access-Control' les en-têtes sur votre serveur et Donc, une autre solution est d'inclure un IFRAME caché dans votre page (la page est sur votre serveur) qui contient un formulaire et vous appelez Submit() de cette page. former pour POSTER les données.

+1

iframe caché? et comment les données iraient-elles à iframe si la requête est trop longue? de toute façon, ce serait 2 requêtes HTTP à chaque fois ... – vsync

+0

Si le iframe vient de votre domaine, vous pouvez accéder à son DOM en utilisant javascript! 'document.getElementById (" yourframe "). document.forms [0] .submit()' etc! – naivists

+0

Je sais, mais comme je l'ai déjà dit, les données sont cross-domaine. Ça y est. iframe trick ne va pas aider un peu .. – vsync

0

Divisez votre charge utile (par exemple à 1024 octets), puis envoyez en utilisant plusieurs requêtes GET.

+0

Voilà ce que je pensais faire, même si cela me semble un peu une solution moche :/ – vsync

+0

Ugly en effet; mais avec AJAX POST, la [Politique d'origine identique] [1] vous bloquera; et bien que [RFC2616] [2] dise "Le protocole HTTP ne place aucune limite a priori sur la longueur d'un URI", [certains agents utilisateurs] [3] sont à peu près sûrs que 2083 octets devraient suffire à tout le monde. [1]: http://en.wikipedia.org/wiki/Same_origin_policy [2]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.2.1 [3 ]: http://support.microsoft.com/kb/208427 – Piskvor