如何从textarea输入创建$ _POST数组

时间:2016-08-12 00:17:49

标签: javascript php jquery html arrays

这是我想要做的。

我有一个textarea输入框,我想以这样的数组格式输入数据到这个textarea框中

'key1'='value1'
'key2'='value2'
'key3'='value3'

然后我想获取这些数据并在我的ajax调用中使用它,如此

var a = $("textarea#array_box").val().split('\n');
$.ajax({
   url: 'index.php/controller/function',
   type: "POST",
   data: a,
   success: function(data) {
    console.log(data);

我正在尝试传入数据,以便在控制器中如果我执行下面的返回语句之一,我将得到结果输出。

 return $_POST['key1'] // should return 'value1'
 return $_POST['key2'] // should return 'value2'
 return $_POST['key3'] // should return 'value3'

如何对此进行编码,以便我可以在textarea框中键入一个数组,并将该数组作为$ _POST传递给我的控制器?

3 个答案:

答案 0 :(得分:0)

您可以使用.filter(Boolean)a数组中删除空元素; $.each()要迭代a数组,.trim()删除空格字符.replace()RegExp /=(?=')/=替换: 1}}; RegExp /'/g'替换为";创建一个字符串以在每次迭代时连接字符串; JSON.stringify()之后的$.each();将结果JSON.stringify()传递给JSON.parse()作为POST

的数据
$("button").click(function() {

    var a = $("textarea#array_box").val().split("\n").filter(Boolean);

    var textareaData = "";

    $.each(a, function(key, value) {
      textareaData += value.trim()
                      .replace(/=(?=')/, ":")
                      .replace(/'/g, '"') 
                      + (key < a.length - 1 ? "," : "");
    });
    textareaData = JSON.stringify("{" + textareaData + "}");
    console.log(textareaData);
    $.ajax({
      url: "/echo/json/",
      type: "POST",
      data: JSON.parse(textareaData),
      success: function(data) {
        console.log(data);
      }
    });
  });

jsfiddle https://jsfiddle.net/ahnegop3/3/

答案 1 :(得分:0)

根据您的代码,您可以执行以下操作:

<?php 
    $tempvar=$_POST['data'];
    $result = array();
    foreach($tempvar as $tempitem){
      $tempitem=str_replace("'","",$tempitem); //we get rid of the ' symbols
      $t=explode("=",$tempitem); //' divide them by the "=" symbol
      $result [$t[0]]=$t[1];
    }

//the result  variable now holds the array
echo $result['key1'] // value1  
?>

答案 2 :(得分:0)

ajax数据格式必须为{key:value,key,value}。因此,要获得该格式,您需要使用$.each进行一些循环并按照这样的方式分配键和值

  

object [key] = value

var a = $("textarea#array_box").val().split('\n');
var temp = [];
$.each(a,function(i,v){
      s = v.split("="); //split again with =
      s[0] = s[0].replace(/'/g,""); //remove ' from string
      s[1] = s[1].replace(/'/g,"");
      temp.push(s[0],s[1]);
});
a = {};
//creating data objects
$.each(temp,function(i,v){
    if(i % 2 == 0){
            a[temp[i]] = temp[++i];
    }
});