【问题标题】:php - turn a list of inputs into a json stringphp - 将输入列表转换为 json 字符串
【发布时间】:2018-04-27 10:23:03
【问题描述】:

我有一个输入列表。插槽的数量取决于解码 json 字符串并像这样循环值的“foreach”:

    slot-1 : <input id="slot-1" type="texte" value="#FFFF00"><br>
    slot-2 : <input id="slot-2" type="texte" value="#9ACD32"><br>
    slot-3 : <input id="slot-3" type="texte" value="#008000"><br>
    slot-4 : <input id="slot-4" type="texte" value="#0d98ba"><br>
    slot-5 : <input id="slot-5" type="texte" value="#0000ff"><br>
    slot-6 : <input id="slot-6" type="texte" value="#8a2be2"><br>
    ....
    ...
    ..
    .

为了获得这种模式,我尝试在更改值后找到 json_encode 的最佳方法:{"input's id":"input's value",}

{"slot-1":"#FFFF00","slot-2":"#9ACD32","slot-3":"#008000","slot-4":"#0d98ba","slot-5":"#0000ff"}

然后用这样的 jQuery ajax 查询发送它

$(document).on('click', '#actualiser', function(){
        var couleurs = '<?php echo $slots; ?>';
        $.ajax({
            url:"/url.php",
            method:"POST",
            data:{
                slots:slots
                },
            success:function(data)
            {   
                console.log("ok");
            }
        })
    });

我已经完成了测试,但我只得到了非常混乱的过程。有什么想法可以实现“干净”吗?

【问题讨论】:

  • &lt;?php echo $slots; ?&gt; 是什么?
  • OP 可能已经在他们的 PHP 文件中的
  • @delboy1978uk 这是我要创建的字符串以将其发送到数据库。我可能是错的。正如我所说这个问题让我做乱码

标签: php arrays json ajax input


【解决方案1】:

1.您需要获取所有输入数据,然后发送到PHP

$(document).on('click', '#actualiser', function(e){
  e.preventDefault();
  var couleurs =[];
  $('#actualiser-form input').each(function(){
    var item = {};
    item[$(this).attr('id')] = $(this).val();
    couleurs.push(item);
  });
  
  var jsonString = JSON.stringify(couleurs);
  console.log(jsonString);
  $.ajax({
    url:"/url.php",
    method:"POST",
    data: jsonString,
    success:function(data)
    {   
      console.log("ok");
    }
  })
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="actualiser-form">
  slot-1 : <input id="slot-1" type="text" value="#FFFF00"><br>
  slot-2 : <input id="slot-2" type="text" value="#9ACD32"><br>
  slot-3 : <input id="slot-3" type="text" value="#008000"><br>
  slot-4 : <input id="slot-4" type="text" value="#0d98ba"><br>
  slot-5 : <input id="slot-5" type="text" value="#0000ff"><br>
  slot-6 : <input id="slot-6" type="text" value="#8a2be2"><br>
  
  <input type="submit" id="actualiser" name="submit" value ="Click me" />
</form>

2.在 PHP 端检查你是否正在获取数据

<?php
if(isset($_POST)){
  echo"<pre/>";print_r($_POST); // check and then do next code accordingly
}

【讨论】:

  • 效果很好。有没有办法提交这样的模式 {"slot-1":"#FFFF00","slot-2":"#9ACD32"....} 而不是 [{"slot-1":"#FFFF00 "},{"slot-2":"#9ACD32"}....]
  • 该模式只会被提交。检查我的代码sn-p的控制台
  • 我明白了...无论如何感谢您的回答。效果很好
  • @Morse 很高兴为您提供帮助:):)
【解决方案2】:

PHP 发生在 html 发送到浏览器之前。因此,您发布的任何内容都设置为 php var,这意味着不会获取任何更改。

相反,只需使用$('#whatever').val() 获取输入,然后将其放入您的数据部分

【讨论】:

  • 确实如此。 =) 我遇到的问题是我永远不知道我会得到多少输入.. 取决于很多因素。所以我需要自动化一点..
【解决方案3】:

你可以试试这样的:

$(document).on('click', '#actualiser', function(e){
        e.preventDefault();
        var couleurs = $('#actualiser-form').serialize();
        $.ajax({
            url:"/url.php",
            method:"POST",
            data: couleurs,
            success:function(data)
            {   
                console.log("ok");
            }
        })
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="actualiser-form">
  slot-1 : <input name="slot-1" type="texte" value="#FFFF00"><br>
  slot-2 : <input name="slot-2" type="texte" value="#9ACD32"><br>
  slot-3 : <input name="slot-3" type="texte" value="#008000"><br>
  slot-4 : <input name="slot-4" type="texte" value="#0d98ba"><br>
  slot-5 : <input name="slot-5" type="texte" value="#0000ff"><br>
  slot-6 : <input name="slot-6" type="texte" value="#8a2be2"><br>
  
  <button type="submit" id="actualiser">Click me</button>
</form>

【讨论】:

  • 我正在使用实际相同的代码完成我的帖子,除了我建议将按钮的类型设置为 type="button" 以避免提交
  • 是的,这也可以。不确定这两种选择是否有“正确”的方法(e.preventDefault() 或 type="button")。
  • @AlexMulchinock 我真的很喜欢你的解决方案......我要做的唯一改变是将“id”更改为“name”。 serialize() 与名称 =) 一起使用。如果你编辑你的帖子,我会很乐意打勾=)
  • 实际上您可以为表单使用任何有效的 CSS 选择器 - api.jquery.com/serialize 编辑:抱歉,我误读了您的评论 - 我认为您的意思是表单字段需要名称?我已经添加了这个。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 2017-03-11
  • 2013-05-14
  • 1970-01-01
  • 2013-10-29
相关资源
最近更新 更多