web-dev-qa-db-ja.com

Ajaxを使用して配列をPHPスクリプトに送信します

関数。Pushで作成された配列があります。配列には非常に大きなデータがあります。これをPHPスクリプトに送信する最善の方法は何ですか?

   dataString = ??? ; // array?
   $.ajax({
        type: "POST",
        url: "script.php",
        data: dataString, 
        cache: false,

        success: function(){
            alert("OK");
        }
    });

script.php:

  $data = $_POST['data'];

  // here i would like use foreach:

  foreach($data as $d){
     echo $d;
  }

これに最適な方法は?

42
Paul Attuck

データ文字列をJSONにエンコードします。

dataString = ??? ; // array?
var jsonString = JSON.stringify(dataString);
   $.ajax({
        type: "POST",
        url: "script.php",
        data: {data : jsonString}, 
        cache: false,

        success: function(){
            alert("OK");
        }
    });

PHPで

$data = json_decode(stripslashes($_POST['data']));

  // here i would like use foreach:

  foreach($data as $d){
     echo $d;
  }

POSTを介してデータを送信する場合、キーと値のペアである必要があります。

副<文>この[前述の事実の]結果として、それ故に、従って、だから◆【同】consequently; therefore <文>このような方法で、このようにして、こんなふうに、上に述べたように◆【同】in this manner <文>そのような程度まで<文> AひいてはB◆【用法】A and thus B <文>例えば◆【同】for example; as an example

data: dataString

間違っている。代わりに:

data: {data:dataString}

108
xbonez
 dataString = [];
   $.ajax({
        type: "POST",
        url: "script.php",
        data:{data: $(dataString).serializeArray()}, 
        cache: false,

        success: function(){
            alert("OK");
        }
    });

http://api.jquery.com/serializeArray/

7
John x

JQuery ajax()関数のデータは、入力として匿名オブジェクトを受け入れます。 documentation を参照してください。あなたが探しているものの例は次のとおりです:

dataString = {key: 'val', key2: 'val2'};
$.ajax({
        type: "POST",
        url: "script.php",
        data: dataString, 
        cache: false,

        success: function(){
            alert("OK");
        }
    });

key=val&key2=val2のように、自分でPOST/GETクエリを書くこともできますが、実際にはエスケープする必要があります。

3
Vyktor

dataStringは、データが文字列でフォーマットされていることを示します(文字で区切られている場合もあります)。

$data = explode(",", $_POST['data']);
foreach($data as $d){
     echo $d;
}

dataStringが文字列ではなく、配列(あなたの質問が示すもの)の事実である場合、JSONを使用します。

1
RvdK

1次元配列を送信しようとしていて、jqueryがコンマ区切り値に変換していた場合>:(そして、以下のコードに従って実際の配列はphpに送信されます

myvalsという名前の単一の次元配列をアタッチする必要があるとします。

jQuery('#someform').on('submit', function (e) {
    e.preventDefault();
    var data = $(this).serializeArray();

    var myvals = [21, 52, 13, 24, 75]; // This array could come from anywhere you choose 
    for (i = 0; i < myvals.length; i++) {
        data.Push({
            name: "myvals[]", // These blank empty brackets are imp!
            value: myvals[i]
        });
    }

jQuery.ajax({
    type: "post",
    url: jQuery(this).attr('action'),
    dataType: "json",
    data: data, // You have to just pass our data variable plain and simple no Rube Goldberg sh*t.
    success: function (r) {
...

これでphpの内側になります

print_r($_POST);

あなたは..を取得します.

Array
(
    [someinputinsidetheform] => 023
    [anotherforminput] => 111
    [myvals] => Array
        (
            [0] => 21
            [1] => 52
            [2] => 13
            [3] => 24
            [4] => 75
        )
)

私の言語はご容赦ください。しかし、多くの Rube-Goldberg ソリューションがWeb全体に散りばめられており、特にSOに散在していますが、いずれもエレガントではなく、実際にajax postを介してphpに1次元配列をポストします。このソリューションを広めることを忘れないでください。

0