Я хочу управлять массивом JavaScript в PHP. Возможно ли такое сделать?
$.ajax({
type: "POST",
url: "tourFinderFunctions.php",
data: "activitiesArray="+activities,
success: function() {
$("#lengthQuestion").fadeOut('slow');
}
});
Действия - это одномерный массив, например:
var activities = ['Location Zero', 'Location One', 'Location Two'];
Скрипт не завершается, когда я пытаюсь это сделать ... Как я могу это исправить?
php
javascript
jquery
ajax
krx
источник
источник
Ответы:
data: { activitiesArray: activities },
Это оно! Теперь вы можете получить к нему доступ в PHP:
<?php $myArray = $_REQUEST['activitiesArray']; ?>
источник
Вы захотите закодировать свой массив как JSON перед его отправкой, или вы просто получите мусор на другом конце.
Поскольку все, что вы отправляете, - это массив, вы можете просто сделать:
data: { activities: activities }
который автоматически преобразует массив за вас.
Подробности смотрите здесь .
источник
Вам нужно превратить это в строку. Вы можете сделать это с помощью метода stringify в библиотеке JSON2.
http://www.json.org/
http://www.json.org/js.html
Код будет выглядеть примерно так:
var myJSONText = JSON.stringify(myObject);
Так
['Location Zero', 'Location One', 'Location Two'];
Станет:
"['Location Zero', 'Location One', 'Location Two']"
Вам нужно будет обратиться к гуру PHP, чтобы узнать, как с этим справиться на сервере. Я думаю, что другие ответы здесь предлагают решение.
Аналогичным образом можно вернуть данные с сервера. Т.е. вы можете превратить его обратно в объект.
var myObject = JSON.parse(myJSONString);
источник
Я знаю, что может быть слишком поздно отвечать на этот вопрос, но у меня это отлично сработало:
Строгозуйте свой объект javascript (json) с помощью
var st = JSON.stringify(your_object);
Передайте данные POST как «строку» (возможно, используя jQuery:
$.post('foo.php',{data:st},function(data){... });
$data = json_decode($_POST['data']);
Вот и все ... вы можете свободно использовать свои данные.
Многомерные массивы и отдельные массивы обрабатываются как обычные массивы. Чтобы получить к ним доступ, выполните обычные действия
$foo[4]
.Ассоциативные массивы (объекты javsacript) обрабатываются как объекты (классы) php. Для того, чтобы получить доступ к ним просто сделать это как классы:
$foo->bar
.источник
Я должен быть таким:
$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer }, function(response, status, xhr) { alert("POST returned: \n" + response + "\n\n"); })
источник
Используйте функцию JQuery Serialize
http://docs.jquery.com/Ajax/serialize
источник
Это сработало для меня:
$.ajax({ url:"../messaging/delete.php", type:"POST", data:{messages:selected}, success:function(data){ if(data === "done"){ } info($("#notification"), data); }, beforeSend:function(){ info($("#notification"),"Deleting "+count+" messages"); }, error:function(jqXHR, textStatus, errorMessage){ error($("#notification"),errorMessage); } });
А это для вашего PHP :
$messages = $_POST['messages'] foreach($messages as $msg){ echo $msg; }
источник
Используйте встроенную в PHP функциональность добавления операнда массива к желаемому имени переменной.
Если мы добавим значения в массив Javascript следующим образом:
acitivies.push('Location Zero'); acitivies.push('Location One'); acitivies.push('Location Two');
Его можно отправить на сервер следующим образом:
$.ajax({ type: 'POST', url: 'tourFinderFunctions.php', 'activities[]': activities success: function() { $('#lengthQuestion').fadeOut('slow'); } });
Обратите внимание на цитаты вокруг действий []. Значения будут доступны следующим образом:
$_POST['activities'][0] == 'Location Zero'; $_POST['activities'][1] == 'Location One'; $_POST['activities'][2] == 'Location Two';
источник
Это потому, что PHP читает ваше значение как строку. Если я не хочу передавать свои данные как объект (как в предыдущих ответах, которые тоже подходят), я просто делаю это в своем PHP:
$activitiesString = $_POST['activitiesArray']; $activitiesArray = (explode(",",$activitiesString));
Последняя строка разбивает строку на биты после каждой запятой. Теперь $ activityArray также является массивом. Он работает, даже если нет запятой (только один элемент в вашем массиве javascript).
Удачного кодирования!
источник