2016-01-20 2 views
2

Dans ma page, j'ai un formulaire pour télécharger des photos sur un service externe qui fournit une API, upload.im, et j'ai besoin de récupérer l'URL où l'image a été téléchargée. Je ne peux vraiment pas faire fonctionner ceci ...Publication d'un formulaire multipart vers une URL externe php

La page de documentation pour cette API est here.

J'ai ajouté un formulaire à ma page PHP:

<form enctype="multipart/form-data" name="UploadForm" id="UploadForm" action="http://uploads.im/api" method="POST"> 
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> 
    <input type="file" name="upload" id="upload" /> 
    <input type="hidden" name="resize_width" id="resize_width" value="" /> 
    <input type="hidden" name="thumb_width" id="thumb_width" value="250" /> 
    <input type="hidden" name="format" id="format" value="xml" /> 
    <input type="submit" id="Submit" name="Submit" /> 
</form> 

J'ai aussi essayé d'utiliser ce code jQuery pour soumettre le formulaire avec l'image sélectionnée:

$(document).ready(function() { 
    $('#UploadForm').on('submit', function(e) { 
     e.preventDefault(); 
     var data = new FormData(jQuery('UploadForm')[0]); 
     jQuery.ajax({ 
      url: 'http://uploads.im/api', 
      data: data, 
      cache: false, 
      contentType: false, 
      processData: false, 
      type: 'POST', 
      success: function(data){ 
       console.log(data); 
      } 
     }); 
    }); 
}); 

Avec ce code, je reçois l'erreur dans la console: screen.png http://i68.tinypic.com/zmnyq8.png Quel est le code d'erreur de l'API; cela signifie que le code fonctionne, mais quelque chose dans la façon dont le formulaire est soumis est faux. Où est le problème?

Merci!

+0

La forme est très bien, le problème est dans le code js, je suis en train de le réparer . – esJuanMa

+0

Est-ce que 'e.preventDefault();' ne devrait pas être à la fin? – rybo111

+0

Aussi pourquoi utilisez-vous 'jQuery ('UploadForm') [0]' par opposition à '$ (this) [0]', et 'jQuery.ajax' par opposition à' $ .ajax'? – rybo111

Répondre

2

Ici, je viens de faire quelques changements dans le code JS:

$(document).ready(function() { 
    $('#UploadForm').on('submit', function(e) { 
     e.preventDefault(); 
     var data = new FormData($(this)); 
     data.append('upload', $('#upload')[0].files[0]); 

     jQuery.ajax({ 
      url: 'http://uploads.im/api', 
      data: data, 
      cache: false, 
      contentType: false, 
      processData: false, 
      type: 'POST', 
      success: function(data){ 
       console.log(data); 
       console.log(data.data.thumb_url); 
       console.log(data.data.img_url); 
      } 
     }); 
    }); 
}); 
+0

Le nom de la forme est' UploadForm'. Est-il correct d'écrire 'var data = new FormData ($ ('# upload'));'. Je pense qu'il devrait être «UploadForm» au lieu de «upload» ... – PWhite

+0

Cela a fonctionné très bien dans Chrome, mais pas dans Firefox .. – esJuanMa

+0

Vous avez raison. C'est UploadForm. – esJuanMa

1

Le problème est peut-être à voir avec cette ligne:

var data = new FormData(jQuery('UploadForm')[0]); 

Il devrait être #UploadForm.

+0

Votre code semble fonctionner. Je reçois un 'XMLDocument' dans la console JS. Comment puis-je lire ceci? – PWhite

+0

@PWhite essayez de double-cliquer sur XMLDocument. – rybo111

0

Essayez comme ci-dessous.

var data = new FormData($('#UploadForm')); 

passer le nœud à FormData Constructor: Le constructeur FormData() crée un nouveau FormData objet

Paramètre: Un élément HTML <form> - lorsque cela est spécifié, l'objet FormData sera rempli avec les touches actuelles du formulaire /valeurs. Il encodera également le contenu d'entrée de fichier.

Référez: https://developer.mozilla.org/en-US/docs/Web/API/FormData/FormData

+0

Je reçois une erreur dans la console JS avec ce code: 'TypeError: l'argument 1 de FormData.constructor n'implémente pas l'interface HTMLFormElement.' – PWhite