Я создал массив вроде этого ["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); } }); });
В вышеприведенном коде есть массив, содержащий записи. Как я могу отправить этот массив с указанным выше кодом, а затем в PHP, я хочу обработать этот массив, так как ques_5
– это ключ, а 9
– значение для этого ключа.
Вы можете передать данные в PHP-скрипт как объект 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"];
Здесь я предлагаю второй метод. Но вы должны попробовать оба 🙂
Если вы хотите отправить пары ключевых значений, что я вижу, было бы лучше использовать библиотеку PHP JSON (например, эту … http://php.net/manual/en/book.json.php )
Затем вы можете отправлять фактические пары значений ключа, используя формат JSON, например … {"ques_5": "19", "ques_4": "19"}
Попробуй это
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)); ?>
Вы можете отправить array in json
формате на php, а затем использовать функцию json_decode
чтобы вернуть массив, как
В вызове ajax вам нужно отправить 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)); ?>
Я хотел бы поделиться полным примером, который работает для меня, чтобы не создавать каждую функцию 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']; } ?>