2016-01-20 124 views
2

在我的页面中,我有一个表单可以在提供api,upload.im的外部服务上传照片,而且我需要获取图像上传的URL。我真的无法得到这个工作...将多部分表单发布到外部URL php

此api的文档页面是here

我添加了一个形式到我的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> 

我还试图用这个jQuery代码与所选择的图像提交表单:

$(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); 
      } 
     }); 
    }); 
}); 

有了这个代码,我得到控制台中的错误: screen.png http://i68.tinypic.com/zmnyq8.png 这是来自API的错误代码;这意味着代码有效,但表单提交的方式是错误的。哪里有问题?

谢谢!

+0

形式是好的,问题是在js代码,我试图修复它。 – esJuanMa

+0

不应该'e.preventDefault();'最后? – rybo111

+0

此外,为什么你使用jQuery('UploadForm')[0]'而不是'$(this)[0]',和'jQuery.ajax'而不是'$ .ajax'? – rybo111

回答

2

在这里,我只是做了在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

表单的名称是UploadForm。是否正确编写var data = new FormData($('#upload'));'。我认为它应该是'UploadForm'而不是'upload' ... – PWhite

+0

它可以在Chrome中正常工作,但不能在Firefox中使用。 – esJuanMa

+0

您是对的。它是UploadForm。 – esJuanMa

1

的问题可能与此线做:

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

应该#UploadForm

+0

你的代码似乎工作。我在JS控制台中获得了一个'XMLDocument'。我怎么读这个? – PWhite

+0

@PWhite尝试双击XMLDocument。 – rybo111

0

请尝试如下。

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

通过该节点到FORMDATA构造: 的FORMDATA()构造函数创建一个新FORMDATA对象

参数:一个HTML <form>元素 - 指定的情况下,FORMDATA对象将与形式的当前键填充/值。它也将编码文件输入内容。

参见:https://developer.mozilla.org/en-US/docs/Web/API/FormData/FormData

+0

在JS控制台中出现以下代码错误:TypeError:FormData.constructor的参数1未实现接口HTMLFormElement。 – PWhite