2016-08-12 80 views
1

這是我正在嘗試做的。

我有一個文本輸入框,我想這樣的陣列形式的數據輸入到該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語句的一個數據在傳遞這樣在控制器下面我會得到的結果輸出。

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

我如何代碼,這樣我可以鍵入我的textarea框的數組,數組傳遞到我的控制器作爲$ _POST?

+3

爲什麼你想這樣做,誰將會在輸入輸入鍵/值對?使用更多輸入,然後序列化表單。 – adeneo

回答

0

您可以使用.filter(Boolean)a數組中刪除空元素; $.each()迭代a數組,.trim()刪除空格字符,.replace()RegExp/=(?=')/替換=:; 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/

+0

@ebellefontaine jsfiddle https://jsfiddle.net/ahnegop3/ – guest271314

+0

解析'key1'='value1'的代碼在哪裏?它看起來像你只是整條線而不是解析它。 – Barmar

+0

@Barmar _「解析key1'的代碼在哪裏='value1?看起來你只需要整條線而不是解析它。」_'$ .each(a,function(key,value){ textareaData [prop +(++ n)] = value; });';嘗試在'textarea'鍵入內容,將光標移動到下一行,再鍵入,按'button'元素,參見'console' at https://jsfiddle.net/ahnegop3/ – guest271314

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 
?> 
0

AJAX數據格式必須是​​。所以爲了獲得這種格式,你需要做一個循環與$.each並且做這樣的分配鍵和值

對象[關鍵] =值

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]; 
    } 
});