関数。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;
}
これに最適な方法は?
データ文字列を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}
dataString = [];
$.ajax({
type: "POST",
url: "script.php",
data:{data: $(dataString).serializeArray()},
cache: false,
success: function(){
alert("OK");
}
});
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クエリを書くこともできますが、実際にはエスケープする必要があります。
dataStringは、データが文字列でフォーマットされていることを示します(文字で区切られている場合もあります)。
$data = explode(",", $_POST['data']);
foreach($data as $d){
echo $d;
}
dataStringが文字列ではなく、配列(あなたの質問が示すもの)の事実である場合、JSONを使用します。
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次元配列をポストします。このソリューションを広めることを忘れないでください。