Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将FormData传递给新函数后使用它_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 将FormData传递给新函数后使用它

Javascript 将FormData传递给新函数后使用它,javascript,jquery,ajax,Javascript,Jquery,Ajax,我不确定这个问题是否值得问,但我似乎找不到解决办法,所以我来了 我有一个Flask应用程序,我在其中提交一个表单,将图像上传到服务器。我使用以下方式创建的FormData发送图像: $( "#myform" ).submit(function(event) { event.preventDefault(); var $form = $(this), formObject = $('form')[0], formData = new FormData(formObj

我不确定这个问题是否值得问,但我似乎找不到解决办法,所以我来了

我有一个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请求移出了submit函数。因此,当我将我的
formObject
formData
传递给包含AJAX请求的函数时,我们称之为
fctA
,它们是未定义的

我想我看到了问题所在,因为submit函数有一个“特殊状态”(您可以使用
$(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
    }
});

我不知道为什么它不起作用,但它可能是由你的错误引起的
formObject
formData
是全局变量,因为您没有使用
var
声明它们<如果ajax请求成功,ajax成功处理程序将调用code>fctA
formObject
被传递到
fctA
formObject
来自哪里?人们可能期望它在全球范围内可用。出于某种原因,这似乎不是真的

我建议使用
var
在本地声明变量,我想大多数人都会同意。全局变量允许任意代码段之间的影响,这些代码段很难忽略,很难管理,实际上很难维护。全局变量也会增加意外地给两个不同变量取相同名称的风险


如果在本地声明变量,则可以将对$.ajax的调用封装在一个函数中,并将
formObject
作为参数,然后在提交处理程序中调用此函数<代码>表单对象也将在ajax成功处理程序中可用,因为Javascript支持闭包。因此,如果您以推荐的方式使用变量作用域,则很有可能不再存在此问题。

我不确定它为什么不起作用,但这可能是由您的错误引起的
formObject
formData
是全局变量,因为您没有使用
var
声明它们<如果ajax请求成功,ajax成功处理程序将调用code>fctA
formObject
被传递到
fctA
formObject
来自哪里?人们可能期望它在全球范围内可用。出于某种原因,这似乎不是真的

我建议使用
var
在本地声明变量,我想大多数人都会同意。全局变量允许任意代码段之间的影响,这些代码段很难忽略,很难管理,实际上很难维护。全局变量也会增加意外地给两个不同变量取相同名称的风险


如果在本地声明变量,则可以将对$.ajax的调用封装在一个函数中,并将
formObject
作为参数,然后在提交处理程序中调用此函数<代码>表单对象也将在ajax成功处理程序中可用,因为Javascript支持闭包。因此,如果按照建议的方式使用变量作用域,则很有可能不再存在此问题。

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


我是否应该删除整个问题,因为这几乎只是一个打字错误问题?如果你删除了太多的问题,那么警告会告诉你你的帐户可能会被阻止。好吧,我找到了解决方案,问题是我将formData传递给一个函数,该函数的最后一个参数是关键字参数,因此formData是关键字参数的值(因为在该调用中使用了默认值),当然,我希望formData所在的参数是未定义的


我是否应该删除整个问题,因为这几乎只不过是一个打字错误?如果你删除太多问题,警告你的帐户可能会被阻止,这让我很不舒服。

我认为传递formData没有问题。你能发布相关代码吗?@mm759我用我使用formD的ajax调用更新了这个问题ata.我认为传递formData没有问题。你能发布相关代码吗?@mm759我已经用我使用formData的ajax调用更新了这个问题。谢谢你的回答,但是,我认为即使问题可能来自变量范围,我也不认为它与
formObject
的声明有关,因为它是声明的使用
var
,查看第三行后的逗号和声明
formData
后的分号。因此,ajax调用已经包装在一个函数中,该函数使用
formObject
作为参数,即
fctA
。尽管当我将ajax调用放在
fctA
之外时,图像已正确上载。问题m可能是因为formData有点奇怪(例如,你在console.log中看不到它的内容)啊,我漏掉了逗号。谢谢你的回答,但是,我认为即使问题可能来自变量范围,我也不认为它与
formObject
的声明有关,因为它是