2016-08-22 52 views
0

我不确定这个问题是否值得问,但我似乎无法找到解决方法,所以在这里。在将它传递给一个新函数后使用FormData

我有一个Flask应用程序,我在其中提交了一个将图像上传到服务器的表单。我送使用创建这样FORMDATA图像:

$("#myform").submit(function(event) { 
    event.preventDefault(); 
    var $form = $(this), 
    formObject = $('form')[0], 
    formData = new FormData(formObject); 
    // other stuff 

的FORMDATA然后通过一个AJAX POST请求到服务器发送。当POST请求位于submit函数中时,此操作完美工作。

问题是,在其他视图中,我需要使用相同的代码,但我将AJAX POST请求从提交函数中移出。因此,当我将formObjectformData传递给包含AJAX请求的函数时,我们将其称为fctA,它们未定义。

我认为我看到了问题,因为提交功能有一个“特定状态”(因为您可以使用$(this)获取表格),但我找不到一种方法将formData传递给其他函数。我不想摆脱fctA,因为它可以避免复制大量代码(因为客户端验证)

有没有办法通过不同的函数调用传递FormData?

在此先感谢。

//Edit: Here's the code where I want to pass the FormData 
//(I'm having trouble indenting it here) 
    $.ajax({ 
     url: "url", 
     type: "GET", 
     dataType: "json", 
     success: function(data) { 
     //Create a JSON object to send other form inputs 

     /* 
     fctA is used to avoid duplicating AJAX POST requests since I 
     need to send the data only when meeting some expectations and 
     I must display error messages otherwise. 
     */ 
     fctA(json, formObject) 
     /* 
     The image is correctly sent if I have a POST request that 
     uses formData right here instead of passing it to fctA. 
     As soon as the POST request leaves the submit function to go to fctA though, 
     formData is undefined when I execute the code. 
     I tried passing formObject or formData, they are both undefined. 
     */ 
    }, 
    error: function() { 
     //Display an error message 
    } 
}); 
+0

我没有看到传递formData的问题。你可以请张贴相关的代码? – mm759

+0

@ mm759我已经用ajax调用更新了问题,我在其中使用formData。 – Batman

回答

0

我不知道到底为什么它不工作,但它可能是由你的variable scopes引起的。 formObjectformData是全局变量,因为您不用var来声明它们。在ajax-request成功的情况下,由ajax-success-handler调用fctAformObject传递给fctAformObject从哪里来?人们可能期望它在全球范围内可用。由于某些原因,这似乎并非如此。

我推荐使用var在本地声明变量,我想大多数人会同意。全局变量允许任意代码之间的影响难以忽略,难以管理,实际上很难维护。全局变量也增加了意外给出两个变量的风险,这两个变量的意思是不同的变量。

如果你在本地声明你的变量,那么你可以用formObject作为参数将你的调用打包到$ .ajax中,并在提交处理程序中调用这个函数。因为Javascript支持闭包,所以在ajax-success-handler中也可以使用formObject。因此,如果您使用可变范围,推荐的方法很可能不会再出现问题。

+0

感谢您的回复,但是,即使问题可能来自变量作用域,我不认为它与'formObject'的声明相关联,因为它是用'var'声明的,查看后面的逗号第三行和'formData'声明后的分号。所以ajax调用已经被封装在一个函数中,它的'formObject'作为参数,并且是'fctA'。虽然,当我把'fctA'外面的ajax调用,图像被正确地上传。问题可能是因为formData有点奇怪(例如,你不能用console.log看到它的内容) – Batman

+0

啊,我错过了逗号。 – mm759

0

好吧我找到了解决方案,问题是我将formData传递给了一个函数,该函数有一个关键字参数作为最后一个参数,因此formData是关键字参数的值(因为在该调用中使用了默认值)当然,我期望我的formData的参数是未定义的。

我应该删除整个问题吗?因为它几乎不过是一个拼写错误问题?如果您删除了太多的问题,可能会阻止告知您帐户的警告。

相关问题