【问题标题】:AJAX with a checkbox带有复选框的 AJAX
【发布时间】:2016-05-04 22:37:18
【问题描述】:

我是 AJAX 和 JavaScript 的新手,但我决定使用 Ajax 将基于 HTML "" 标记的值发送到 Python 处理程序。下面是我的代码,由site 模拟而来。我遇到的问题是了解一个框何时“选中”与“未选中”,当我在输入标签中“未选中”时,值如何传递?我没有获得连接,因为我想确保用户点击的任何内容都会通过 AJAX 传递到我的 Python 处理程序。

send_data = function(status) {

        $.ajax({
      url: "/subscription",
            dataType: "json",
            data: {'status' : status},
            type: "POST",
            cache: false

    }).done(function(data, status, xml) {

         var obj = jQuery.parseJSON(data);
         alert(obj.success);

        }).fail(function(jqXHR, textStatus, errorThrown) {


        }).always(function() {


        });

}


$(document).ready(function() {

    $("#subscription").submit(function() {

        var cb = $("input#switch-1");

        if (cb.is("checked")) {
            send_data(cb.val());
        } else {
            send_data(cb.val());
        }
        return false; 
    });

});
<form id="subscription" action="">
    <label  class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="switch-1">
    <input type="checkbox" id="switch-1" name="status" class="mdl-switch__input" id="status" unchecked />
    <span class="mdl-switch__label">USEREMAIL Subscribed</span>
<input type="submit" value="Submit" />

</form>

【问题讨论】:

  • 我猜id="status" 应该是name="status",因为这个输入已经有一个id。

标签: javascript jquery python html ajax


【解决方案1】:

您当前的代码可以像这样减少,您正在徒劳地进行验证,在这两种情况下您发送的是相同的东西......

$("#subscription").submit(function() {
    var cb = $("input#switch-1");
    send_data(cb.val()); //your current code can be reduced like this
    return false; 
});

如果您想查看传递的内容,只需使用 python 打印您通过复选框名称收到的内容...

【讨论】:

  • 这很有意义。谢谢!对不起,这里是101。我添加了您的代码,但我没有看到传递的实际值。我启用了控制台,为什么未通过已检查与未检查的原因我缺少什么:postimg.org/image/tdhm5k34x.
  • @user2690151,好吧,控制台中的错误是不言自明的 - 您应该通过 http 协议在适当的 Web 服务器上运行此代码,而不是通过 file://
【解决方案2】:

首先,正确的选择器是:checked
Аnd 你应该只在检查时将复选框值传递给 send_data() 函数,否则你的条件是无关紧要的 - 你对检查和未检查的输入做同样的事情。

所以,你的代码应该是这样的:

if (cb.is(":checked")) {
    send_data(cb.val());
} else {
    send_data(null);
}

但如果您只需要将表单值传递给服务器,则无需手动处理复选框,您可以这样做:

var send_data = function(data) {
    $.ajax({
        url: "/subscription",
        dataType: "json",
        data: data,
        type: "POST",
        cache: false
    }).done(function(data, status, xml) {
        var obj = jQuery.parseJSON(data);
        alert(obj.success);
    }).fail(function(jqXHR, textStatus, errorThrown) {

    }).always(function() {

    });
}

$("#subscription").submit(function() {
    send_data($(this).serialize());
});

请注意,如果未选中复选框,它的值将不会发送到服务器(这是默认的浏览器行为)。因此,您只需检查后端脚本中状态字段的存在即可。

【讨论】:

  • 嗨,Alexey,感谢您的反馈。我尝试添加您的代码,但得到“不允许使用 405 方法”。我最初认为这是我的 python 处理程序的问题,但现在我相信它与 javascript 有关。我能够使用我的其他代码对我的处理程序进行测试,但我没有通过状态值。不知道我错过了什么:-)。
  • 附加的是我的处理程序,但我仍然对如何传递状态有疑问:class Subscription(webapp2.RequestHandler): def post(self): subscription_status = self.request.get('status' ) user_name = users.get_current_user() logging.info('我到了: %s!', user_name) logging.info('状态是: %s!', subscription_status)
  • 我只能说:1)我只改变了post数据发送到服务器的方式,它不应该导致405错误; 2)正如我在 cmets 中指出的那样,您的输入没有“名称”属性,因此它的值不会发送到服务器,这可能是您的代码无法正常工作的原因。
猜你喜欢
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多