使用vanilla js

时间:2015-10-08 17:09:37

标签: javascript jquery ajax forms

我将JS从iOS应用程序注入到Web应用程序中。我控制两者的代码。我正在尝试编写从条形码扫描器获取输入的javascript,然后将其放入Web表单然后提交表单。我使用jQuery.form插件制作所有表单ajax。我使用ajaxForm。

我想尽可能使代码尽可能通用,以防我改变前端代码(例如删除ajaxForm)。我的目标是简单地有一组id,当它与id匹配时,改变输入的值,然后提交表单。这种形式可以是ajax或常规形式;但iOS应用程序不应该知道实现细节。有没有办法在vanilla js中做到这一点?

var scan_ids = ['item','search'];

for(var k=0;k<scan_ids.length;k++)
{
    var scan_id = scan_ids[k];

    if (document.getElementById(scan_id))
    {
        document.getElementById(scan_id).value = "[SCAN]";

        if (scan_id == "item")
        {
             /*I don't want to do this as I am bound to ajaxSubmit; 
I would rather trigger a form submit and have it use ajaxForm
 that is bound to it. If I do .submit() it ignores the ajaxForm */

            $('#add_item_form').ajaxSubmit({target: "#register_container", beforeSubmit: salesBeforeSubmit, success:itemScannedSuccess});


        $('#add_item_form').submit(); //(WORKS and submits via ajax)
        document.getElementById('add_item_form').submit(); //(SUBMITS; DOES NOT AJAX)
        }

        break;
    }
}

1 个答案:

答案 0 :(得分:7)

要使用vanilla / plain JS提交表单,只需在表单上调用submit方法:

document.getElementById('formId').submit();

然而,听起来你想要发出一个AJAX请求。这些与标准HTTP请求不同。它们被称为XMLHttp Requests

使用普通HTTP请求提交表单时(使用form.submit()时会发生什么情况),浏览器使用{{1}内的信息填充发送到服务器的POST / GET变量正在发送。

发送XMLHttp请求时,不会为您完成这项工作。你必须自己做。

据我所知,这是jQuery.form正在做的大部分内容。它正在收集表单中的信息,填充XMLHttp请求,然后使用所谓的AJAX技术将表单提交到服务器。

您可能会发现this回答有用;有人编写了一个简单的Javascript方法,用于通过AJAX提交表单。以下是该答案的方法:

<form>

值得注意的是,此代码的原始海报使用的方法不适用于某些旧版浏览器。特别是不支持ECMAScript 5实现的浏览器。

我的建议是坚持使用你已有的插件。我看不出重新发明轮子的理由。请放心,您的jQuery库正在使用vanilla Javascript。