天道酬勤,学无止境

jQuery POST not returning variable users

I am trying to post the values of checked boxes, but unable to do so. It first collects all the checked boxes in an array (selected_users-which is working fine upon testing it with alert function )and then sends them collectively. But I'm not able to post the data. The error that I get is Key 'users' not found in . Where i'm going wrong? how do I modify my POST statement in jQuery plugin?

View.py

def get_data(request):

if request.method == 'POST': 
    selected_users = request.POST['users']
return HttpResponse(selected_users)

urls.py

urlpatterns = patterns('',
    url(r'get_data/','apps.api.views.get_data', name = 'grabhalo_get_data'),
)

jQuery

$(document).ready(function(){
                $('#submit').click(function() {
                  var selected_users = $('input[type=checkbox]:checked').map(function(_, el) {
                    return $(el).val();
                    }).get();
                    alert(selected_users);     // works fine
                    $.post("get_data/",{users:selected_users});   // not able to post
                });    
            })

Checkboxes

{% for user in users %}
    <input type="checkbox" class="check" value="{{user.id}}" />{{user.name}}<br>    
{%endfor%}

    <form id="form" method="POST" action="/get_data/">
       {% csrf_token %}
       <input type="text" class="span8 search-query" placeholder="Type here..." name="chat">
       <input type="submit" value="Send" class = "btn btn-primary" id = "submit">
   </form>

Different Suggestions are welcomed , if anyone can redefine the .post function.

Thanks

评论

Your JQuery $.post function is ok, the problem is getting the values in a Django view. You are posting an array of values - to get them you use getlist() function on POST QueryDict. So your view would look like this:

if request.method == 'POST':
    selected_users = request.POST.getlist('users[]')
    return HttpResponse(selected_users)

Please see:

QueryDict.getlist(key, default)

django - getlist()

Why dont you try your POST like this:

$(document).ready(function(){
  $('#submit').click(function() {
      var selected_users=[];
      var $inputs = $('.check');
      $inputs.each(function() {         
            selected_users.push( $(this).val());        
        });            
                    alert(selected_users);     // works fine
      $.post("get_data/",{"users" : selected_users},function(response) 
        {
            alert(response);
        });     
            })

try this in your view.py :

if request.method == 'POST': 
selected_users = request.POST.get("selected_users", "")
return HttpResponse(selected_users)

When you submit the form you would need to prevent the default action. Otherwise your page refreshes voiding an post from happening.

Also use serialize array to convert them into an array. Try this

$(document).ready(function(){
     $('#submit').click(function(e) {
         e.preventDefault();
         // Will only serialize the checked values by default
         var selected_users = $('input[type=checkbox]').serializeArray();
          console.log(selected_users);     
          $.post("get_data/",{'users[]':selected_users}); 
     });    
})

You can use $.ajax instead if you want to work with lot more options

$.ajax({
     url : 'get_data', 
     data : {'users[]' : selected_users},
     dataType: "set it to the type you are expecting".
     type : 'post'
}).done(function(data, status, xhr) {
   console.log(data)
}).fail(function(xhr, status, error) {
   console.log("Error status : "+ status + "-- error : " + error);
});

You just have to combined @Aditya and @Yurly answers:

script

function get_csrf_token(){
    return $("input[name='csrfmiddlewaretoken']").val();
}

$(document).ready(function(){
    $('#submit').click(function() {
        var datas = new Array();
        var i = 0;
        var csrf_token = get_csrf_token();

        $("input[type=checkbox]:checked").each(function() {
            datas[i] = $(this).val();
            i++;
        });   

        #make sure the url is correct
        $.post("get_data/", {'users[]': datas, 'csrfmiddlewaretoken': csrf_token}, function(data){
            alert(data);
        });   
    });    
})

views.py

if request.method == 'POST':
    selected_users = request.POST.getlist('users[]')
    return HttpResponse(selected_users)

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • PHP变量没有通过ajax jquery在页面上回显(PHP variable not echoing on page via ajax jquery)
    问题 我的代码有问题,因为我的 php 变量在使用 ajax jquery 时没有在页面上回显。 这是我的代码... <script> function refresh_div() { $('.loader').show(); var username = "<?php echo $user; ?>"; jQuery.ajax({ type: "POST", url: "load.php", data:{user : username}, success:function() { jQuery("#load_msgs").append(response+'<br>'); }, complete: function(){ $('.loader').hide(); } }); } t = setInterval(refresh_div,1000); </script> 我正在尝试将“用户名”发送到页面 url“load.php”...我这样称呼它但没有任何回应... if(isset($_POST['user'])) { echo $_POST['user']; } 请帮忙谢谢... :) 编辑... 当我尝试使用此代码时,即在这样的成功函数中添加传递响应作为参数时...... <script> function refresh_div() { $('.loader').show()
  • 如何使用 jQuery POST 将变量从 JavaScript 传递到 PHP(How to pass variable from JavaScript to PHP using jQuery POST)
    问题 我正在从sessionnum页面中的以下Javascript 函数传递变量sessionnum: $(document).ready(function(){ timestamp = 0; updateMsg(); $("form#chatform").submit(function(){ $.post("backend.php",{ message: $("#msg").val(), name: author, action: "postmsg", time: timestamp, tablename1: sessionnum }, function(xml) { $("#msg").empty(); addMessages(xml); document.forms['chatform'].reset() fixScroll(); }); return false; }); }); 到 backend.php 中的以下 PHP 函数: if(@$action == "postmsg") { mysql_query("INSERT INTO `$tablename1` (`user`,`msg`,`time`) VALUES ('$name','$message',".time().")",$dbconn); mysql_query("DELETE FROM `
  • jQuery将Ajax结果返回到外部变量(jQuery return ajax result into outside variable)
    问题 我在使用ajax时遇到一些问题。 如何将ajax的所有结果分配给外部变量? 我用谷歌搜索并找到了此代码。 var return_first = (function () { var tmp = null; $.ajax({ 'async': false, 'type': "POST", 'global': false, 'dataType': 'html', 'url': "ajax.php?first", 'data': { 'request': "", 'target': arrange_url, 'method': method_target }, 'success': function (data) { tmp = data; } }); return tmp; }); 但不适合我。 谁能说出该代码出了什么问题? 回答1 您之后缺少逗号 'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' } 另外,如果您希望return_first保存匿名函数的结果,则需要进行一个函数调用: var return_first = function () { var tmp = null; $.ajax({ 'async': false, 'type': "POST", 'global'
  • 将变量从一页传递到下一页(Passing a variable from one page to the next page)
    问题 我正在开发一个问答网站,在该网站上,用户会在页面上看到五个谜题,并在他尝试页面上的问题时使用 JavaScript 计算得分。 分数保存在 Javascript 变量score 。 我有一个这样的分页系统: 现在,当用户单击3 时,我想将变量score发送到下一页,我在每个这样的页面上都require scoreUpdateInDatabase.php ,这样前一页的分数就会永久存在于数据库中,并且以下 PHP 脚本显示了他接下来的5个问题。 如何以安全的方式传递该score变量? 我不能使用GET因为用户会修改它。 如果可以使用POST我对POST感到满意,即使可以修改POST数据,但我只想要最低限度的安全性。 PS请不要建议进行 AJAX 调用,在那里我会发送score ,而返回时会携带接下来的 5 个问题。 我不想使用 AJAX 来刷新内容,因为它对 SEO 不友好。 回答1 最简单的解决方案是基于 cookie。 将值写入会话 cookie 并读取它。 您可以使用 jquery cookie。 如果需要,它还为您提供了要求 https 的选项。 回答2 将其保存在会话中。 POST 在这种特殊情况下同样有效,但我更喜欢将它存储在会话中。 回答3 唯一安全的方法是使用POST或 AJAX 将实际答案传递给服务器,也在服务器端计算分数并将其保存在SESSION变量中。
  • How to pass variable from JavaScript to PHP using jQuery POST
    I am passing the variable sessionnum from the following Javascript function in the page chat.php: $(document).ready(function(){ timestamp = 0; updateMsg(); $("form#chatform").submit(function(){ $.post("backend.php",{ message: $("#msg").val(), name: author, action: "postmsg", time: timestamp, tablename1: sessionnum }, function(xml) { $("#msg").empty(); addMessages(xml); document.forms['chatform'].reset() fixScroll(); }); return false; }); }); To the following PHP function in backend.php: if(@$action == "postmsg") { mysql_query("INSERT INTO `$tablename1` (`user`,`msg`,`time`) VALUES ('$name','
  • 如何从成功获取ajax响应并使用jQuery将其分配到变量中?(How to get the ajax response from success and assign it in a variable using jQuery?)
    问题 大家好,我在从 ajax 获取响应时遇到问题。 如果我在控制台中显示它。 我可以查看它。 但是如何在变量中分配它? 这就是我所拥有的。 在我的 PHP 代码中,我有这个 public function checkPassword($password){ $username = $this->session->userdata('username'); $validate = $this->members_model->checkPassword($password,$username); echo $validate; } 在我的 jquery 我有这个 $('#existing').on('keyup',function(){ var id = '<?php echo $this->session->userdata("user_id"); ?>'; var password_url = '<?php echo site_url("member/checkPassword/' +id+ '"); ?>'; $.ajax({ type: 'POST', url: password_url, data: '', dataType: 'json', success: function(response){ var g = response; if(g == 1){ $('
  • 用 Javascript 突出显示单词,我错过了什么?(Highlighting words with Javascript, what am I missing?)
    问题 我一直在使用基本的 javascript/PHP 聊天室。 我希望某些单词在聊天流中出现时突出显示。 聊天室的 html 输出如下所示: <div class="chat-container"> <div class="chat chat-message-111"><strong style="color: #840;">User 1</strong>: What is your favourite animal?</div> <div class="chat chat-message-112"><strong style="color: #840;">User 2</strong>: I vote for #dog. </div> <div class="chat chat-message-113"><strong style="color: #840;">User 3</strong>: I have a #cat!</div> </div> 我找到了一个 Javascript 解决方案,这正是我正在寻找的(请参阅 https://jsfiddle.net/4ny8adpg/2/ 以获取工作示例)。 但是当我尝试在聊天室中使用它时,它不会突出显示“聊天容器”div 中的任何文本。 会不会因为聊天室的内容是 PHP/Javascript 的输出而不是像 jsfiddle
  • 在 Javascript 中突出显示单词 - 为什么在页面完全加载后它们不会保持突出显示?(Highlighting words in Javascript - Why won't they stay highlighted after the page fully loads?)
    问题 所以这是继@Drakes 之前在这个问题上所做的出色工作之后的一个问题:用 Javascript 突出显示单词,我错过了什么?。 解决方案是通过查找“#cat”或“#dog”并将它们替换为突出显示单词 <span class='cat'>#CAT</span> 或者 <span class='dog'>#DOG</span> 然后我们就可以用CSS来控制span标签的背景颜色了。 这完美地工作,但是背景颜色在消失之前只保留片刻。 仔细观察,似乎跨度标签应用正确,然后突然再次删除。 这是供您查看的实际工作示例,以及登录详细信息以运行任何测试和查看聊天。 【已移除,不再存在】 以下是当前在工作示例上运行的上一个问题的更新代码。 再次,非常感谢任何进一步的帮助。 如果您需要任何其他信息,请告诉我! Javascript: // NOTE: I needed to define these variables to make the demo work var ajaxurl = "http://ip.jsontest.com/"; var chatroom_slug = "1"; var last_update_id = "1"; var last_update_received = 0; function chatroom_check_updates() { jQuery
  • 使用 jQuery 从 PHP 获取变量值(Getting variable value from PHP with jQuery)
    问题 那么如何使用 jquery 从 php 文件中获取变量值...? jquery 代码在其他文件(tpl)中 例如我有 register.php 和 register.tpl(register.php 的模板文件) 注册.php ...some includes here... if(isset($_POST['submit'])) { $username = mysql_real_escape_string(trim($_POST['username'])); $email = mysql_real_escape_string(trim($_POST['email'])); $check = $mysql->query("SELECT username FROM ".TBL_USERS." WHERE username = '".$username."' OR email = '".$email."'"); $rows_check = mysql_num_rows($check); if($rows_check > 0) { echo 1; } else { $password = mysql_real_escape_string($_POST['password']); $salt = generate_salt($email); $hash = hash_password
  • 从jquery ajax调用返回(return from jquery ajax call)
    问题 我试图在我自己的函数中使用jQuery ajax调用的返回值,但它始终返回未定义的值。 function checkUser2(asdf) { $.ajax({ type: "POST", async: false, url: "check_user.php", data: { name: asdf }, success: function(data){ return data; //alert(data); } }); } $("#check").click(function(){ alert(checkUser2("muma")); }); ajax调用绝对有效,因为当我取消注释警报时,我得到了正确的返回,并且可以在firebug中看到它。 我在做蠢事吗? 回答1 AJAX调用是异步的-这意味着AJAX请求是按常规程序执行顺序进行的,并且在您的程序中这意味着checkUser2()不会将数据返回警报。 您不能以这种方式使用$.ajax()调用中的返回值,而是将利用AJAX返回数据的代码移到success()函数中,即该函数的作用。 回答2 我认为您可以这样做: function checkUser2(asdf) { var s = $.ajax({ type: "POST", async: false, url: "check_user.php", data: {
  • 使用 AJAX 向 php 文件发送查询时变量保持为空(Variable remains empty when using AJAX in sending query to php file)
    问题 我有一个表单,在表单提交之前我在其中执行了一些 AJAX 错误处理,只是为了改善用户体验。 我的问题是变量$user_password在整个过程中似乎保持为空,因此错误处理是无关紧要的。 在下面的代码中,第一个 keyup 函数是检查密码是否超过最小长度,第二个是检查密码是否匹配: $(document).ready(function() { $("input[name=user_password]").keyup(function(){ var user_password = $("input[name=user_password]").val(); //data to server... $.post("../server/hub.php", { //POST name and variable... check_password: user_password //places fetched information... }, function(data, status) { $("#user_password").html(data); }); }); }); $(document).ready(function() { $("input[name=user_password_2]").keyup(function(){ var user_password = $(
  • Highlighting words in Javascript - Why won't they stay highlighted after the page fully loads?
    So this is a question following on from the awesome work @Drakes has done on this question previously: Highlighting words with Javascript, what am I missing?. The solution is to highlight words by finding "#cat" or "#dog" and replacing them with <span class='cat'>#CAT</span> or <span class='dog'>#DOG</span> Then we can control the background colour of the span tag with CSS. This works perfectly, however the background colour only remains for a brief moment before disappearing. Upon a closer look, it seems the span tags are applied correctly and then removed again suddenly. Here is the actual
  • PHP variable not echoing on page via ajax jquery
    I am having a problem with my code as my php variable is not being echoed on page when using ajax jquery. Here is my code... <script> function refresh_div() { $('.loader').show(); var username = "<?php echo $user; ?>"; jQuery.ajax({ type: "POST", url: "load.php", data:{user : username}, success:function() { jQuery("#load_msgs").append(response+'<br>'); }, complete: function(){ $('.loader').hide(); } }); } t = setInterval(refresh_div,1000); </script> i am trying to send "username" to page url "load.php"... i called it this way but nothing is being echoed... if(isset($_POST['user'])) { echo $
  • 使用JavaScript / jQuery发送有关重定向的POST数据? [复制](Send POST data on redirect with JavaScript/jQuery? [duplicate])
    问题 这个问题已经在这里有了答案: JavaScript发布请求,例如表单提交(31个答案) 5年前关闭。 基本上,我想做的是在更改window.location时发送POST数据,就好像用户已提交表单并将其转到新页面一样。 我需要这样做,因为我需要传递一个隐藏的URL,出于美观原因,我不能简单地将其作为GET放在URL中。 这是我目前所拥有的,但是它不发送任何POST数据。 if(user has not voted) { window.location = 'http://example.com/vote/' + Username; } 我知道您可以使用jQuery.post()发送POST数据,但我需要使用新的window.location发送它。 因此,回顾一下,我需要通过POST将api_url值发送到http://example.com/vote/ ,同时将用户发送到同一页面。 供将来参考,我最终做了以下工作: if(user has not voted) { $('#inset_form').html('<form action="http://example.com/vote/' + Username + '" name="vote" method="post" style="display:none;"><input type="text" name="api
  • Jquery Ajax On-Focusout On-Submit - 需要 2 次点击(Jquery Ajax On-Focusout On-Submit - Requires 2 Clicks)
    问题 您好,我有一个 jquery 和 ajax 验证表单,当您在密码中填写值(错误值)x@x.com 和 1111111 时,它将给出 ajax 验证通知(这很好),但之后如果您输入值(正确值)example@example.com 和 12345678 它需要点击两次才能提交。 这意味着如果您先输入错误的值,然后输入正确的值,则需要单击两次才能提交。 以下是代码。 我已经设置了下面的代码,因此您可以将代码复制并粘贴到文件(之前给出的文件名)中,并且您将拥有一个可以使用的工作模型。 我已经对 php 验证文件进行了硬编码,因此你们可以复制和粘贴代码并查看它是如何工作的。 索引.php <?php if (session_status() == PHP_SESSION_NONE) { session_start(); } ?> <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> </head> <body> <form method="post" name="loginform" action="success.php"> <input type="email" class="homepage" name="user_email2" id="user_email2" placeholder="Email
  • jQuery-将Ajax响应存储到全局变量中(JQuery - Storing ajax response into global variable)
    问题 我仍然是jQuery和ajax领域的新手,但是我有一个$ .ajax请求,执行GET来检索一些XML文件(〜6KB或更少),但是在用户花那个页面的时间内,XML内容应该不会/不会更改(此设计我无法更改,因为我正在从其他地方读取XML文件,因此我也无权更改XML文件)。 因此,我有一个全局变量将响应数据存储到该变量中,并且随后对该数据进行的任何查找都将在此变量上进行,因此不需要进行多个请求。 考虑到XML文件可以增加的事实,我不确定这是最佳实践,而且还来自Java背景,因此我对全局公共变量的想法通常是不可以的。 因此,我的问题是,是否可能有更好的方法来执行此操作,以及一个问题,如果文件扩展到某个可笑的文件大小,是否会导致任何内存问题? 我认为数据可以传递到xml对象中的一些getter / setter类型函数中,这可以解决我的全局公共变量问题,但仍然引发了一个问题,即我是否应该将响应存储在对象本身内部。 例如,我目前正在做的是: // top of code var xml; // get the file $.ajax({ type: "GET", url: "test.xml", dataType: "xml", success : function(data) { xml = data; } }); // at a later stage do something
  • PHP variables not returning to success AJAX/jQuery POST correctly using json_encode()
    I've been trying for hours to get this to work. I have a <div id=""data_friends> tag and a hidden input field that I want to update using AJAX. The divtag is as follows: <div class="friends-tab-list" id="data_friends"> <?php //Default query limits results to 8 $sql = ("SELECT * FROM users WHERE FIND_IN_SET(?, friend_array) > 0 LIMIT 0,8"); $query = mysqli_prepare($con, $sql); $query->bind_param('s', $username); $query->execute(); $result = $query->get_result(); $num_rows = $result->num_rows; while ($row = $result->fetch_assoc()) { $row['profile_pic']; $row['username']; echo "<a class='profile
  • 在 html 按钮上运行 PHP 函数单击(Run PHP function on html button click)
    问题 单击按钮时,我需要运行一些 PHP 函数。 我知道这不应该是 php 的用途,而是 js 应该这样做,但是我的函数在用户询问时从服务器收集数据时正在做什么。 具体来说,它获取一些用户数据并将其写入文件,由用户决定将收集哪些数据。 我怎样才能做到这一点? 我看到了在按钮单击上运行 PHP 文件的帖子,但我仍然不确定如何使用它。 我正在学习,所以请不要太苛刻 我试过onclick()和各种各样的东西,但它没有导致任何有用的东西 回答1 每当您通过 HTTP 请求访问它时都会运行一个 php 文件,无论是 GET、POST 还是 PUT。 您可以使用 JQuery/Ajax 在单击按钮时发送请求,甚至只需更改浏览器的 URL 以导航到 php 地址。 根据 POST/GET 中发送的数据,您可以让 switch 语句运行不同的函数。 通过 GET 指定函数 您可以使用此处的代码:如何从存储在变量中的字符串以及 switch 语句调用 PHP 函数,以根据发送的数据自动调用适当的函数。 所以在 PHP 方面,你可以有这样的东西: <?php //see http://php.net/manual/en/function.call-user-func-array.php how to use extensively if(isset($_GET['runFunction']) &&
  • 使用jquery $ .ajax调用PHP函数(using jquery $.ajax to call a PHP function)
    问题 这可能是一个简单的答案,但是我正在使用jQuery的$ .ajax调用PHP脚本。 我要做的基本上是将PHP脚本放入函数中,然后从javascript调用PHP函数。 <?php if(isset($_POST['something'] { //do something } ?> 对此 <?php function test() { if(isset($_POST['something'] { //do something. } } ?> 我如何在javascript中调用该函数? 现在,我只是使用$ .ajax和列出的PHP文件。 回答1 使用$.ajax调用服务器上下文(或URL或任何其他内容)以调用特定的“操作”。 您想要的是这样的: $.ajax({ url: '/my/site', data: {action: 'test'}, type: 'post', success: function(output) { alert(output); } }); 在服务器端,应读取action POST参数,并且相应的值应指向要调用的方法,例如: if(isset($_POST['action']) && !empty($_POST['action'])) { $action = $_POST['action']; switch($action) { case 'test'
  • 会话变量未在实时服务器中传递[关闭](Session variable not passed in live server [closed])
    问题 关闭。 此问题不符合 Stack Overflow 准则。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其成为 Stack Overflow 的主题。 4年前关闭。 改进这个问题 我已经在 php 中尝试了一些用于用户注册的代码,这整个代码在本地服务器上运行良好,但是当涉及到实时服务器时,每个 php 代码都被执行,但会话变量没有显示,但在本地服务器会话变量被传递并正确显示 DB_Function.php public function storeUser($salutation, $fname, $lname, $dob, $mobile, $country, $state, $city, $pin){ try { //$hash = md5($password); $characters = '0123456789'; $uuid = ''; $random_string_length = 5; for ($i = 0; $i < $random_string_length; $i++) { $uuid .= $characters[rand(0, strlen($characters) - 1)]; } $fullname = $fname . " " . $lname; $vault_no = $salutation . "" . $country . ""