Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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发送包含提交按钮的HTML表单?_Javascript_Jquery_Html_Forms - Fatal编程技术网

是否可以通过JavaScript发送包含提交按钮的HTML表单?

是否可以通过JavaScript发送包含提交按钮的HTML表单?,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,我需要通过HTTP发送一个文件,然后通过单击将表单发送到多个目的地 表单有一个提交按钮 <input type="submit" id="button1" name="submit" value="upload file"> 我的问题:如何通过包含提交按钮的JavaScript发送表单?如何通过JavaScript单击提交按钮 这是我的Java脚本文件: // If frame 1 is loaded, the function prepareUpload() will be ex

我需要通过HTTP发送一个文件,然后通过单击将表单发送到多个目的地

表单有一个提交按钮

<input type="submit" id="button1" name="submit" value="upload file">
我的问题:如何通过包含提交按钮的JavaScript发送表单?如何通过JavaScript单击提交按钮

这是我的Java脚本文件:

// If frame 1 is loaded, the function prepareUpload() will be executed
$("#frame1").ready(function() {  
   prepareUpload();  
}); 


function prepareUpload(){

     // click-handler is registered to button1
     $('#button1').click(function(){
            // if clicked...
            // "Please Wait" window
            $.blockUI({ css: { 
                border: 'none', 
                padding: '15px', 
                backgroundColor: '#000', 
                '-webkit-border-radius': '10px', 
                '-moz-border-radius': '10px', 
                opacity: .5, 
                color: '#fff' 
            } }); 

            //register load handler on iframe which triggers uploadData() 
            $('#frame1').load(function(){
                // reload from iframe
                uploadData();
            });

            iTargetNumber = 0;
            // call function uploadData()
            uploadData();
            return true;
        });
}


function uploadData() {
    var dataSet = data[iTargetNumber];
    document.getElementById("statusbar").style.width = (iTargetNumber / data.length * 200) + "px";

    // if file is uploaded to all servers...
    if (iTargetNumber == data.length) {
       document.getElementById("statustext").innerHTML = "done";
       // Reload browser window
       document.location.reload();
       return;
    }

    // status message
    document.getElementById("statustext").innerHTML = "uploading to " + dataSet.sUrl;

    //set "action" attribute in HTML form    
    $('#form1').attr('action', dataSet.sUrl);

    //set hidden fields in HTML form   
    for (var key in dataSet){
        $('#' + key).attr('value', dataSet[key]);
    }

    // HERE IT HANGS after the first run is completed because of the submit button.

    //submit HTML form with correct values
    $('#form1').submit();

    // increment variable +1
    iTargetNumber++;
}

// initialize variable 
var iTargetNumber = 0;
由于“提交”按钮,它在发送第一个表单后挂起

使用

var myForm = document.forms.form1
var emptyForm = document.createElement('form');
emptyForm.submit.apply(myForm);
代替

$('#form1').submit();
这也没用。生成的消息没有包含以下行:

Content-Disposition: form-data; name="submit"

upload file
一个额外的隐藏字段,如

<input type="hidden" id="submit" name="submit" value="submit">
这将创建一个内容配置:表单数据;name=submit也没有帮助,因为它将位于文件内容之前,并且最终不会有上载文件

================

问题解决了。解决方案是通过按钮调用JavaScript函数

<button id="button1">upload file</button>
表单内部还有一个隐藏的提交按钮

<input type="submit" style="display:none" id="button2" name="submit" value="upload file">

JavaScript函数调用这个隐藏的提交按钮。现在,它可以正常工作了。

从另一个表单获取提交方法就可以了

var myForm = document.forms.id_of_form;
var emptyForm = document.createElement('form');
emptyForm.submit.apply(myForm);

我不知道哪里出了问题,但听起来使用AJAX可能更适合您正在尝试的工作。你试过$button1.onclick吗?因为,这本质上就是用户在单击按钮时触发的。此外,我还要检查由于元素上的闭包(尤其是iTargetNumber和data)而导致的未定义值;但是Firebug说$button1.onclick不是一个函数。以我的形式:好的,等等,显然这必须是document.getElementByIdbutton1.onclick。我的错。您是否检查了uploadData中未定义的值?请注意,解决方案中隐藏的元素不是提交按钮,而是您将其值设置为upload file。试试。我在哪里可以插入这些行?我插入了您的行并删除了$'form1'。提交;但是消息不包括内容配置:表单数据;name=提交上传文件。我与wireshark进行了检查,服务器需要发送文件,只有在包含这些行时才接受。提交按钮只有在用户激活时才成功。您必须使用隐藏输入复制数据。如何使用隐藏输入复制数据?我需要将一个表单和一个选定的文件发送到不同的服务器,这只能通过Java脚本实现,因为表单只能有一个目标。下面是完整的代码:您将一个输入添加到表单中,该表单具有隐藏的类型以及您想要的相同名称和值。
<input type="submit" style="display:none" id="button2" name="submit" value="upload file">
var myForm = document.forms.id_of_form;
var emptyForm = document.createElement('form');
emptyForm.submit.apply(myForm);