Передача массива JavaScript в PHP через jQuery $.Аякс



Я хочу манипулировать массивом JavaScript в PHP. Можно ли сделать что-то подобное?



$.ajax({
type: "POST",
url: "tourFinderFunctions.php",
data: "activitiesArray="+activities,
success: function() {
$("#lengthQuestion").fadeOut('slow');
}
});


Activities-это одномерный массив, например:



var activities = ['Location Zero', 'Location One', 'Location Two'];


скрипт не завершается, когда я пытаюсь это сделать... Как я могу это исправить?

536   8  

8 ответов:

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

Я знаю, что это может быть слишком поздно, чтобы ответить на это, но это сработало для меня в большой путь:

  1. преобразовать в строки вашего объекта JavaScript (JSON) при var st = JSON.stringify(your_object);

  2. передайте свои данные POST Как "строку" (возможно, используя jQuery:$.post('foo.php',{data:st},function(data){... });

  3. Декодируйте свои данные на стороне сервера обработки:$data = json_decode($_POST['data']);

вот именно... вы можете свободно использовать свои данные.

обрабатываются многомерные массивы и одиночные массивы как обычные массивы. Чтобы получить к ним доступ, просто сделайте нормальный $foo[4].

ассоциативные массивы (объекты javsacript) обрабатываются как объекты php (классы). Чтобы получить к ним доступ, просто сделайте это как классы:$foo->bar.

используйте функцию сериализации JQuery

http://docs.jquery.com/Ajax/serialize

сериализация используется для подготовки вводимые пользователем данные для публикации в a сервер. Сериализованные данные в стандартный формат совместимость почти со всей стороны сервера языки программирования и рамок.

Я должен быть такой:

$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer },
  function(response, status, xhr) {
    alert("POST returned: \n" + response + "\n\n");
  })

это сработало для меня:

$.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';

Comments

    Ничего не найдено.