【问题标题】:How do I post an array and loop through it using php?如何发布一个数组并使用 php 循环遍历它?
【发布时间】:2017-12-14 15:50:22
【问题描述】:

我有一个输入字段,当用户输入内容时,它会立即使用 jQuery replace 函数创建一个数组。目标是将这些值发送到 PHP 并在 MySQL 中的特定表上执行实时搜索。

我得到了input 字段和ajax 调用的部分,但到目前为止我还没有完成 php 循环的部分。

我的目标是将此数组序列化到 php 并将每个项目用作变量。

这是我的 jQuery 和 HTML fiddle

这是我的代码:

HTML:

<div class="container-fluid" style="margin-top:10px;">
  <div class="row" style="padding:10px;">
    <input class="form-control" id="Input">
  </div>
  <div class="row">
    <div class="container rounded" id="smd" style="background-color:red; height:100px;display:none;">
<span>Search Results here</span>
    </div>
  </div>
</div>

jQuery:

 $("#Input").keyup(function() {
  var div = $('#smd');
  if ($("#Input").val().length > 0) {
    div.show();
    var source = $("#Input").val();
    var splittedSource = source.replace(/\s{2,}/g, ' ').split(' ');
    $.post('/url/to/page', splittedSource);

    console.log(splittedSource);
  } else {
    div.hide();
  }
});

这是我的字符串的样子:

["This", "is", "my", "string"]

0:"This"
1:"is"
2:"my"
3:"string"

【问题讨论】:

  • 那么问题出在哪里?你试过print_r($_POST) 看看你在服务器上得到了什么吗?
  • 你不能只是把任何东西作为数据参数,它必须是 jQuery 可以使用/转换成适当的请求格式的格式,比如application/x-www-form-urlencoded,例如$.post(url,{data:splittedSource})
  • 注明。我已经更改了$.post 部分。
  • @PatrickEvans - 实际上你几乎可以。仅以data 的形式发送一个数组可以正常工作,但您在服务器上没有访问它的密钥,它只会用数据填充$_POST

标签: javascript php jquery mysql arrays


【解决方案1】:

您需要以键/值对的形式发送或以application/json 的形式发送和接收。

现在您只发送一个没有可以被$_POST索引的键的值

试试

$.post('/url/to/page',{arr: splittedSource});

在php中

$arr = $_POST['arr'];//php array

以 json 格式执行:

$.ajax({
   url: '/url/to/page',
   contentType:'application/json',
   data: JSON.stringify(splittedSource)
   // other options
});
//php
$arr = json_decode(file_get_contents('php://input'),true);

【讨论】:

    【解决方案2】:

    虽然我觉得您可以(甚至应该)在后端代码中处理此类逻辑,但您可能需要查看how to use arrays in a form 上的手册

    这表明您应该使用以[] 结尾的名称。由于发布表单只是默认使用application/x-www-form-urlencoded enctype,您可以简单地将值myarray[]=a&amp;myarray[]=b...等放在请求正文中,PHP会将其解释为数组值$_POST['myarray']

    【讨论】:

      【解决方案3】:

      这是常见的格式

      $.ajax({
        type: "POST",
        url: url,
        data: data,
        success: success,
        dataType: dataType
      });
      

      您需要发送正确的格式,例如

      $.post( "test.php", { name: "John", time: "2pm" } );
      

      所以你的代码需要更新

      $.post('/url/to/page', splittedSource); 
      

      $.post('/url/to/page',{data: splittedSource});
      

      这样您就可以使用

      获取数据
      <?php
      $data = $_POST['data'];
      

      你也可以使用这种格式

      $("button").click(function(){
          $.post("demo_test_post.asp",
          {
              name: "Donald Duck",
              city: "Duckburg"
          },
          function(data, status){
              alert("Data: " + data + "\nStatus: " + status);
          });
      });
      

      更多关于 ajax 帖子的信息

      https://api.jquery.com/jquery.post/

      【讨论】:

      • 几乎,我完成了那部分:$.post('/url/to/page',{data: splittedSource}); 但我发送了多个请求,数据array 立即更改并且可能包含多个元素,所以我需要做一个whileforeach 循环将所有这些数组元素放入变量中。这是我不确定的部分。
      • 我使用 Input 字段,用户输入值,所有这些值都由 jquery replace 函数分隔。我不能给每个对象一个键,除了 0,1,2,3
      猜你喜欢
      • 2011-08-21
      • 2021-07-15
      • 2019-07-10
      • 1970-01-01
      • 2013-11-23
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      相关资源
      最近更新 更多