簡體   English   中英

通過jQuery $ .ajax將JavaScript數組傳遞給PHP

[英]Passing JavaScript array to PHP through jQuery $.ajax

我想在PHP中操作JavaScript數組。 可以這樣做嗎?

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

活動是一個單維數組,如:

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

我嘗試這個時腳本沒有完成...我該如何解決?

data: { activitiesArray: activities },

而已! 現在您可以在PHP中訪問它:

<?php $myArray = $_REQUEST['activitiesArray']; ?>

您需要在發送之前將數組編碼為JSON,否則您只會在另一端獲得一些垃圾。

由於你發送的只是數組,你可以這樣做:

data: { activities: activities }

這將自動為您轉換數組。

詳情請見此處

你需要把它變成一個字符串。 您可以使用JSON2庫中的stringify方法執行此操作。

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. var st = JSON.stringify(your_object);將你的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

我應該是這樣的:

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

使用JQuery Serialize函數

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

Serialize通常用於准備要發布到服務器的用戶輸入數據。 序列化數據采用標准格式, 幾乎與所有服務器端編程語言和框架兼容

使用將數組操作數附加到所需變量名稱的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';

這是因為PHP將您的值讀取為字符串。 如果我不想將我的數據作為對象傳遞(就像之前的答案一樣,這也很好),我只是在我的PHP中執行此操作:

 $activitiesString = $_POST['activitiesArray'];
 $activitiesArray = (explode(",",$activitiesString));

最后一行在每個逗號后將字符串拆分為多個位。 現在$ activitiesArray也是一個數組。 即使沒有逗號(javascript數組中只有一個元素),它也能正常工作。

快樂的編碼!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM