Отправить массив с запросом ajax на php
Я создал массив, подобный этому ["9", "ques_5", "19", "ques_4"]
. Теперь я хочу отправить его из JS в PHP, но я не получаю правильных результатов. Мой код JS:
$(".button").click(function(e) {
e.preventDefault();
$.ajax({
type : 'post',
cache : false,
url : 'test/result.php',
data : {result : stuff},
success: function(resp) {
alert(resp);
}
});
});
В приведенном выше коде stuff
представляет собой массив, который содержит записи. Как я могу отправить этот массив с приведенным выше кодом, а затем в PHP я хочу обработать этот массив, как ques_5
является ключом, и 9
становится значением для этого ключа.
Ответы
Ответ 1
Вы можете передать данные в PHP script как объект JSON. Предположим, что ваш объект JSON похож:
var stuff ={'key1':'value1','key2':'value2'};
Вы можете передать этот объект в PHP-код двумя способами:
1. Передайте объект как строку:
AJAX вызов:
$.ajax({
type : 'POST',
url : 'result.php',
data : {result:JSON.stringify(stuff)},
success : function(response) {
alert(response);
}
});
Вы можете обрабатывать данные, переданные в result.php
, как:
$data = $_POST["result"];
$data = json_decode("$data", true);
//just echo an item in the array
echo "key1 : ".$data["key1"];
2. Передайте объект напрямую:
AJAX вызов:
$.ajax({
type : 'POST',
url : 'result.php',
data : stuff,
success : function(response) {
alert(response);
}
});
Управляйте данными непосредственно в result.php
из массива $_POST
как:
//just echo an item in the array
echo "key1 : ".$_POST["key1"];
Здесь я предлагаю второй метод. Но вы должны попробовать оба: -)
Ответ 2
Если вы хотите отправить пары ключевых значений, что я вижу, было бы лучше использовать библиотеку PHP JSON (например, эту... http://php.net/manual/en/book.json.php)
Затем вы можете отправлять фактические пары значений ключа, используя формат JSON, например... { "ques_5": "19", "ques_4": "19" }
Ответ 3
Попробуйте это
var array = ["9", "ques_5", "19", "ques_4"];
console.log(array.join(","));
выше код выведет строку с запятой, разделенной как 9,ques_5,19,ques_4
, затем вставьте ее в ajax-вызов.
И затем в php explode
этой строке.
Другие возможные решения.
Первая
var obj = { 'item1': 'value1', 'item2': 'value2' };
$.ajax(
{
type: 'post',
cache: false ,
url: 'test/result.php',
data: { result : JSON.stringify(obj) },
success: function(resp)
{
alert(resp);
}
});
Второй
var a = $.JSON.encode(obj);
$.ajax(
{
type: 'post',
cache: false ,
url: 'test/result.php',
data: { result : a },
success: function(resp)
{
alert(resp);
}
});
In PHP File
<?php
$json = $_POST["data"]
var_dump(json_decode($json));
?>
Ответ 4
Вы можете отправить формат array in json
в php, а затем использовать функцию json_decode
, чтобы вернуть массив, например
В вызове ajax вам нужно отправить json для этого, вам нужно сначала создать массив значений, чтобы вы получили его в правильной форме
так что вы json выглядите как {"ques_5":"9","ques_4":19}
и использовать в вызове ajax
data: JSON.stringify(`your created json`),
contentType: "application/json; charset=utf-8",
dataType: "json",
В PHP это выглядит как
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
?>
Ответ 5
Я хотел бы поделиться полным примером, который работает для меня, чтобы избежать создания каждой функции javascript для каждой функции php
//на стороне HTML простой javascript-вызов из ссылки
<a href="javascript:CargaZona('democonllamada', 'tituloprin', {'key1':'value1','key2':'value2'})" >test</a>
<div id='tituloprin' >php function response here!</div>
//на стороне javascript
function CargaZona(fc, div, params) {
var destino = "#" + div;
var request = $.ajax({
url : "inc/phpfunc.php",
type : "POST",
data : {
fc : fc,
params : JSON.stringify(params)
},
dataType : "html"
});
request.done(function (msg) {
$(destino).html(msg);
});
request.fail(function (jqXHR, textStatus) {
alert("Request failed: " + textStatus);
});
}
//на странице phpfunc.php
<?php
$params = "{'key1':'value1','key2':'value2'}";
$fc = 'def';
if (isset($_POST['fc'])) { $fc = $_POST['fc']; }
if (isset($_POST['params'])) { $params = $_POST['params']; }
switch ($fc) {
default:
call_user_func($fc,$params);
}
function democonllamada($params) {
$params = json_decode("$params", true);
echo "ok llegaron".$params['key1'];
}
?>