2010-11-14 8 views
0

Je veux envoyer un message au serveur se compose de quelques sections différentes. L'objectif est d'envoyer des informations x-www-form-urlencoded avec une image. J'ai essayé faire de STH à similaire ceci: http://en.wikipedia.org/wiki/MIME#Multipart_messagesquel est le problème avec ma requête http en javascript?

Ceci est ma fonction js de le faire:

function sendPage() { 
    var source = document.getElementById("pageContainer") 
    var serializer = new XMLSerializer 
    if (!source.hasChildNodes()) { 
     alert("nie ma nic do wysłania") 
     return 
    } 
    var DOMNodeInString = "content=" + escape(serializer.serializeToString(source)) 
    // sendToServer("savePage.php", true, handleAndShow, DOMNodeInString);return 
    xhttp.open("POST", "savePage.php", true) 
    var boundary = "xxx" 
    var body = "--" + boundary + "\r\n" 
    var file = document.getElementById("imgSource").files[0] 
    //wysyłam obrazek 
    if (file) { 
     var reader = new FileReader() 
     reader.readAsBinaryString(file) 
     body += "Content-Disposition: form-data; name='upload'; filename='" + file.name + "'\r\n" 
     body += "Content-Type: application/octet-stream\r\n\r\n" 
     body += reader.result + "\r\n" 
     body += "--" + boundary + "\r\n" 
    } 
    //wysyłam pozostałe pola formularza 
    body += "Content-Type: multipart/x-www-form-urlencoded \r\n\r\n" 
    body += DOMNodeInString 
    body += "\r\n--" + boundary + "--" 
    xhttp.setRequestHeader("Content-Type", "multipart/mixed; boundary=" + boundary) 
    xhttp.onreadystatechange = handleAndShow 
    alert(body) 
    xhttp.send(body) 
} 

cependant, la fonction ne fonctionne pas. Mon script php est incapable de recevoir $ _POST ["content"]. Que dois-je changer pour améliorer le script js?

+2

Avez-vous essayé d'analyser le réseau activité avec Firebug (FF), Web Inspector (Chrome/Safari) ou Dragonfly (Opera)? Quels sont les en-têtes de réponse, par exemple? –

+0

têtes respose: Connection: Keep-Alive Content-Encoding: gzip Content-Length: 20 Content-Type: text/plain Date: 14 novembre 2010 17:03:52 GMT Keep-Alive: délai d'attente = 15, max = 100 Serveur: Apache/2.2.16 (Debian) Variez: Accepter-Encoder X-Powered-By: PHP/5.3.3-2 le contenu est vide et ce n'est pas ce que j'attends parce que savePage.php est

Répondre

1

Il n'est pas possible de télécharger un fichier à l'aide d'une requête XMLHttpRequest. Vous devrez utiliser Flash/Java ou créer un iframe caché et faire un envoi réel. Je suggère d'utiliser un plugin javascript pour "AJAX" file upload.

+0

C'est ce que je vais faire en réalité. J'ai déjà laissé tomber l'idée que je peux envoyer un fichier via xhr. Je veux seulement comprendre ce qui ne va pas avec mon js sauf pour l'égalité de lecteur.result à "" –

0

En dehors de réponse @tvanfosson, il vous manque une création de l'objet xhttp:

var xhttp = new XMLHttpRequest(); 

Utilisez tout débogueur pour voir que la JS fonctionne sans exceptions ...

+0

oui, vous êtes Wright. Cependant, il est défini avant la définition de la fonction sendPage(), ce n'est donc pas le cas. –

Questions connexes