Passando a matriz de JavaScript para o PHP através do jQuery $ .ajax

Quero manipular uma matriz de JavaScript em PHP. É possível fazer algo assim?

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

Atividades é uma matriz de dimensões únicas como:

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

O script não é completo quando eu tento isso … Como posso corrigi-lo?

 data: { activitiesArray: activities }, 

É isso aí! Agora você pode acessá-lo em PHP:

  

Você quer codificar a sua matriz como JSON antes de enviá-la, ou você terá algum lixo na outra extremidade.

Como tudo que você está enviando é a matriz, você pode apenas fazer:

 data: { activities: activities } 

que irá converter automaticamente a matriz para você.

Veja aqui para detalhes.

Você precisa transformar isso em uma string. Você pode fazer isso usando o método stringify na biblioteca JSON2.

http://www.json.org/

http://www.json.org/js.html

O código seria algo como:

 var myJSONText = JSON.stringify(myObject); 

assim

 ['Location Zero', 'Location One', 'Location Two']; 

Se tornará:

 "['Location Zero', 'Location One', 'Location Two']" 

Você terá que se referir a um guru do PHP sobre como lidar com isso no servidor. Eu acho que outras respostas aqui intimam uma solução.

Os dados podem ser retornados do servidor de forma semelhante. Ou seja, você pode transformá-lo de volta em um object.

 var myObject = JSON.parse(myJSONString); 

Eu sei que pode ser muito tarde para responder a isso, mas isso funcionou para mim de uma ótima maneira:

  1. Classifique o seu object javascript (json) com var st = JSON.stringify(your_object);

  2. Passe seus dados POST como “string” (talvez usando jQuery: $.post('foo.php',{data:st},function(data){... });

  3. Decodifique seus dados no processamento do lado do servidor: $data = json_decode($_POST['data']);

É isso … você pode usar livremente seus dados.

Arrays multidimensionais e arrays individuais são tratados como matrizes normais. Para acessá-los, faça o normal $foo[4] .

Arrays associativos (objects javsacript) são tratados como objects php (classs). Para acessá-los, faça-o como classs: $foo->bar .

Use a function JQuery Serialize

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

Serialize normalmente é usado para preparar dados de input do usuário para serem postados em um servidor. Os dados serializados estão em um formato padrão compatível com praticamente todas as linguagens e estruturas de programação do lado do servidor .

Eu deveria ser assim:

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

Isso funcionou para mim:

 $.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); } }); 

E isso para o seu PHP :

 $messages = $_POST['messages'] foreach($messages as $msg){ echo $msg; } 

Use a funcionalidade incorporada do PHP de append o operando da matriz ao nome da variável desejada.

Se adicionarmos valores a uma matriz de Javascript da seguinte maneira:

 acitivies.push('Location Zero'); acitivies.push('Location One'); acitivies.push('Location Two'); 

Pode ser enviado para o servidor da seguinte forma:

 $.ajax({ type: 'POST', url: 'tourFinderFunctions.php', 'activities[]': activities success: function() { $('#lengthQuestion').fadeOut('slow'); } }); 

Observe as cotações em torno de atividades []. Os valores estarão disponíveis da seguinte forma:

 $_POST['activities'][0] == 'Location Zero'; $_POST['activities'][1] == 'Location One'; $_POST['activities'][2] == 'Location Two';