如何在javascript中发送文件输入的发布请求?

时间:2014-09-07 07:58:49

标签: javascript dom file-upload input

我写这个程序是为了帮助我通过javascript发送帖子请求

只发送带有发送类的元素

我将所有数据存储在变量中,因为这可以在另一个ajax函数中重复使用。

然后使用它来创建表单并将其发送出去。

这可以发送页面中的任何数据,而不仅仅是表单输入元素

但它无法发送文件,因为我不知道如何将文件输入元素存储到变量,然后为该文件创建输入文件元素。

是否可以让我的程序处理文件输入?

function send(url)
{
    var data=getData();
    var form=document.createElement('form');
    form.setAttribute('method', 'POST');
    form.setAttribute('action', url);
    for(x in data)
    {
        var hidden=document.createElement('input');
        hidden.setAttribute('type', 'hidden');
        hidden.setAttribute('name', x);
        hidden.setAttribute('value', data[x]);
        form.appendChild(hidden);
    }
    document.body.appendChild(form);
    form.submit();
}

function getData()
{
    var data={};
    var sendNode = document.getElementsByClassName('send');
    for(var x=0; x<sendNode.length; x++)
    {
        var node=sendNode[x];
        if(node.nodeName=='INPUT')
        {
            var nodeType=node.type;
            if(nodeType=='check')
            {
                if(data[node.getAttribute('name')])
                {
                    data[node.getAttribute('name')].push(node.value);
                }
                else
                {
                    var arr=[node.value];
                    data[node.getAttribute('name')] = arr;
                }

            }
            else if(nodeType=='radio')
            {
                if(node.checked)
                {
                    data[node.getAttribute('name')] = node.value;
                }
            }
            else //text, password, email
            {
                data[node.getAttribute('name')] = node.value;
            }
        }
        else if(node.nodeName=='SELECT' || node.nodeName=='TEXTAREA')
        {
            data[node.getAttribute('name')] = node.value;
        }
        else
        {
            data[node.getAttribute('data-name')] = node.innerHTML;
        }

    }
    return data;
}

0 个答案:

没有答案