2011-02-17 16 views
45

Diyelim ki bir dizi eleman içeren bir javascript dizim var (her yerde 50-200).Geçiş JavaScript Dizini -> PHP

Bunu ajax kullanarak PHP'ye (hazır deyim) göndermek istiyorum. Şu anda, bir döngü içinde birçok kez bir php dosyası .load, ama ben bir dizi içine dönüştürmek ve bir kez 50-200 kez yerine bir kez PHP dosyasını yüklemek, bir dizi göndermek istiyorum.

array[i] = variable;

+11

JSON arkadaşın :-) –

+0

Verebileceğimiz tavsiye kalitesi cevabın belirsizliğiyle sınırlıdır. Kullandığınız döngünün bazı örnek kodlarını gönderir misiniz? – meagar

+1

Verileri JSON üzerinden nasıl gönderebilirim/diğer ucundan alabilirim? – switz

cevap

83

Dizininizi JavaScript'te kodlamak için JSON.stringify(array) öğelerini kullanabilir ve daha sonra almak için PHP betiğinizde $array=json_decode($_POST['jsondata']);'u kullanabilirsiniz.

+11

Girdilerinizi dezenfekte etmeyi unutmayın, yoksa kızartıyorsunuz! : D – Stephen

+10

PHP komut dosyalarınızdaki herhangi bir girdinin kötü niyetli niyetli kişiler tarafından ele geçirilmiş olabileceğini varsayalım. "Mysql_real_escape_string()" ile bir veritabanı sorgusu oluşturmayı planladığınız değişkenleri ve "JSON.stringify (array)' yi kullandıktan sonra "htmlentities()" – Gareth

+0

@ Gareth "ile ekrana yerleştirilecek her şeyi çalıştırın. 'datavar = {array: array} 'gibi bir JSON nesnesinin içine eklemeniz gerekiyor mu? Veya .getJSON() isteğinizin parametresinde 'datavar' yerine' array' iletebilirsiniz? Örneğin. '.get (script.php, array, function (data) {...'. Ayrıca, her zaman $ _POST içinde jsondata' olan – LazerSharks

0

Yani Dizilerin iki boyutlu bir dizi oluşturmak için istemci tarafı döngü kullanmak ve bir istekte PHP tüm şey gönderin. Sunucu tarafı, her alt dizi için düzenli ekleme/güncelleştirme yapan başka bir döngüye sahip olmanız gerekir.

function obj2url(prefix, obj) { 
     var args=new Array(); 
     if(typeof(obj) == 'object'){ 
      for(var i in obj) 
       args[args.length]=any2url(prefix+'['+encodeURIComponent(i)+']', obj[i]); 
     } 
     else 
      args[args.length]=prefix+'='+encodeURIComponent(obj); 
     return args.join('&'); 
    } 

önek bir parametre adıdır:

+0

@Switz Bir ['$ .get'] (http://api.jquery.com/jQuery.get/) ya da [' $ .post'] 'ın 'data' parametresini kullandığınızı varsaydım (http://api.jquery.com/jQuery.post/) çağrı. – meagar

2

İşte http get isteği parametre olarak gönderilmek üzere bir php uyumlu diziye js dizi veya nesne dönüştürmek için bir fonksiyon.

DÜZENLEME:

var a = { 
    one: two, 
    three: four 
}; 

alert('/script.php?'+obj2url('a', a)); 

üretecektir Eğer script.php bir dizi olarak $ _GET [ 'a'] kullanmanızı sağlayacak

/script.php?a[one]=two&a[three]=four 

. En sevdiğiniz ajax motorunuza yolunuzu, js'den script.php'yi çağırmak için url'yi sağlamanız gerekir.

+0

düzenlemeyi kontrol edin, umarım sizin için her şeyi açıklığa kavuşturur. –

+0

any2url nedir? – Alex

22

AJAX istekleri, <form> öğesi aracılığıyla başlatılan GET ve POST isteklerinden farklı değildir. Bu, verileri almak için $ _GET ve $ _POST kullanabileceğiniz anlamına gelir.

Eğer bir AJAX isteği (jQuery örneği) yapıyoruz

:

// JavaScript file 

elements = [1, 2, 9, 15].join(',') 
$.post('/test.php', {elements: elements}) 

O var (neredeyse) eşdeğer bu formu göndermeden: sunucu tarafında üzerinde, her iki durumda da

<form action="/test.php" method="post"> 
    <input type="text" name="elements" value="1,2,9,15"> 
</form> 

Ben e katılacağım basitlik açısından

// test.php file 

$elements = $_POST['elements']; 
$elements = explode(',', $elements); 

: $ _POST değişkeni verileri okuyabilir Burada virgül ile lures. JSON serileştirme daha evrensel bir çözüm olsa da. Sen PHP javascript dizi aktarabilirsiniz

+1

Neden bu tam olarak ne gibi bir cevap kabul edilmez OP sordu ve neden daha az güçlük, especi bazı çerçeveler automagically sizin için POST dizileri patlayabilir müttefik – zakius

-1

...

JavaScript

...
<script language="javascript"> 

//its your javascript, your array can be multidimensional or associative 

plArray = new Array(); 
plArray[1] = new Array(); plArray[1][0]='Test 1 Data'; plArray[1][1]= 'Test 1'; plArray[1][2]= new Array(); 
plArray[1][2][0]='Test 1 Data Dets'; plArray[1][2][1]='Test 1 Data Info'; 
plArray[2] = new Array(); plArray[2][0]='Test 2 Data'; plArray[2][1]= 'Test 2'; 
plArray[3] = new Array(); plArray[3][0]='Test 3 Data'; plArray[3][1]= 'Test 3'; 
plArray[4] = new Array(); plArray[4][0]='Test 4 Data'; plArray[4][1]= 'Test 4'; 
plArray[5] = new Array(); plArray[5]["Data"]='Test 5 Data'; plArray[5]["1sss"]= 'Test 5'; 

function convertJsArr2Php(JsArr){ 
    var Php = ''; 
    if (Array.isArray(JsArr)){ 
     Php += 'array('; 
     for (var i in JsArr){ 
      Php += '\'' + i + '\' => ' + convertJsArr2Php(JsArr[i]); 
      if (JsArr[i] != JsArr[Object.keys(JsArr)[Object.keys(JsArr).length-1]]){ 
       Php += ', '; 
      } 
     } 
     Php += ')'; 
     return Php; 
    } 
    else{ 
     return '\'' + JsArr + '\''; 
    } 
} 


function ajaxPost(str, plArrayC){ 
    var xmlhttp; 
    if (window.XMLHttpRequest){xmlhttp = new XMLHttpRequest();} 
    else{xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");} 
    xmlhttp.open("POST",str,true); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlhttp.send('Array=' + plArrayC); 
} 

ajaxPost('ArrayReader.php',convertJsArr2Php(plArray)); 
</script> 

ArraySender.html

ve PHP Kod ... ArrayReader.php

<?php 

eval('$plArray = ' . $_POST['Array'] . ';'); 
print_r($plArray); 

?>