javascript - 如何使用 GET 方法通过 XMLHttpRequest 传递 FormData

标签 javascript html ajax forms

senderform 的方法是 POST 时,一切正常。但是,一旦我将方法更改为 GET,我就不会在服务器上收到任何东西。

function ajaxSubmit(destinationElement, senderform) {

    var xmlreq = new XMLHttpRequest();
    var params = new FormData(senderform);
    xmlreq.open(senderform.method, senderform.action, true);

    if (/\/content\.php$/.test(senderform.action))
        xmlreq.onreadystatechange = receiveTable;
    else xmlreq.onreadystatechange = receiveText;

    xmlreq.send(params);
}

我知道我可以 manually append key-value pairs在操作地址的末尾,但问题是我不知道哪个表单将通过哪些字段传递。

如果可能的话,我更喜欢原生 javaScript。

我如何使用 XMLHttpRequest 和来自 senderform 的键值对发送 GET 请求,它指向表单元素(与它已经用于 POST 请求的方式相同)?

最佳答案

第一个参数是对提交按钮或表单元素本身的引用。其次是 XMLHttpRequest 的回调函数。

var ajaxSubmit = function(sender, callback) {
    var xmlreq = new XMLHttpRequest(), params;
    // look around for the sender form and key-value params
    if (sender.form !== undefined)
    {
        params = new FormData(sender.form);
        params.append(sender.name, sender.value);
        sender = sender.form;
    }
    else params = new FormData(sender);
    var actAddress = sender.action;

    // append the params to the address in action attribute
    if (sender.method == 'get')
    {
        var firstRun = true;
        for (var key of params.keys())
        {
            if (firstRun)
            {
                actAddress += '?';
                firstRun = false;
            }
            else actAddress += '&';
            actAddress += key + "=" + params.get(key);
        }
    }
    
    xmlreq.open(sender.method, actAddress, true);
    xmlreq.onreadystatechange = callback;
    if (sender.method == 'get')
        xmlreq.send();
    else xmlreq.send(params);
}

因此您可以将其用作

<form onsubmit="ajaxSubmit(this,callbackFx)" >
<!-- or -->
    <input onclick="ajaxSubmit(this,callbackFx)" type="submit" name="" value=""/>
</form>

关于javascript - 如何使用 GET 方法通过 XMLHttpRequest 传递 FormData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35902647/

相关文章:

php - 使用 Google TV 模板时,如何使用 AJAX、PHP 和 MySQL 实现动态视频源的后端?

javascript - 单击工具提示中的链接时,Tooltipster 插件不会触发 jquery 函数

javascript - javascript 如何给一个对象添加属性?

javascript - 通过 jQuery 设置时,元素值未显示在控制台中

javascript - Cypress 在使用 cy.visit() 时注销

html - AngularJs 的编辑器?

javascript - 我需要直接在右侧使用提交按钮对电子邮件输入进行编码(包括图像)

c# - Google 财经,如何获取流式传输的 JSON 数据?

Javascript文本动画: Bigger and bigger,然后消失

Javascript:回调中的无点样式