Chuyển mảng JavaScript sang PHP thông qua jQuery $ .ajax


79

Tôi muốn thao tác một mảng JavaScript trong PHP. Có thể làm một cái gì đó như thế này?

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

Các hoạt động là một mảng đơn chiều như:

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

Tập lệnh không hoàn thành khi tôi thử điều này ... Làm cách nào để khắc phục sự cố này?


Câu trả lời:


147
data: { activitiesArray: activities },

Đó là nó! Bây giờ bạn có thể truy cập nó bằng PHP:

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

10
Tại sao câu trả lời này lại khó tìm đến vậy !? Cảm ơn bạn, đây chính xác là những gì tôi cần.
Vian Esterhuizen

Đơn giản như một hacker! Làm tốt! Bạn đã làm tôi tự cười chính mình: D.
Arashtad Ltd

12

Bạn sẽ muốn mã hóa mảng của mình dưới dạng JSON trước khi gửi nó, hoặc bạn sẽ chỉ nhận được một số rác ở đầu bên kia.

Vì tất cả những gì bạn đang gửi là mảng, bạn chỉ có thể làm:

data: { activities: activities }

mà sẽ tự động chuyển đổi mảng cho bạn.

Xem chi tiết tại đây .


11

Bạn cần biến điều này thành một chuỗi. Bạn có thể thực hiện việc này bằng cách sử dụng phương thức stringify trong thư viện JSON2.

http://www.json.org/

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

Mã sẽ trông giống như sau:

var myJSONText = JSON.stringify(myObject);

Vì thế

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

Sẽ trở thành:

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

Bạn sẽ phải tham khảo một chuyên gia PHP về cách xử lý điều này trên máy chủ. Tôi nghĩ rằng những câu trả lời khác ở đây là một giải pháp.

Dữ liệu có thể được trả về từ máy chủ theo cách tương tự. Tức là bạn có thể biến nó trở lại thành một đối tượng.

var myObject = JSON.parse(myJSONString);

9

Tôi biết có thể là quá muộn để trả lời điều này, nhưng điều này đã hiệu quả với tôi theo một cách tuyệt vời:

  1. Chuỗi đối tượng javascript của bạn (json) với var st = JSON.stringify(your_object);

  2. Chuyển dữ liệu POST của bạn dưới dạng "chuỗi" (có thể sử dụng jQuery: $.post('foo.php',{data:st},function(data){... });

  3. Giải mã dữ liệu của bạn trong quá trình xử lý phía máy chủ: $data = json_decode($_POST['data']);

Vậy là xong ... bạn có thể thoải mái sử dụng dữ liệu của mình.

Mảng đa chiều và mảng đơn được xử lý như mảng bình thường. Để truy cập chúng chỉ cần làm bình thường $foo[4].

Các mảng liên kết (đối tượng javsacript) được xử lý như các đối tượng php (lớp). Để truy cập chúng chỉ làm điều đó như các lớp học: $foo->bar.


2

Tôi nên như thế này:

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

1

Sử dụng hàm JQuery Serialize

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

Serialize thường được sử dụng để chuẩn bị dữ liệu đầu vào của người dùng được đăng lên máy chủ. Dữ liệu được tuần tự hóa ở định dạng chuẩn tương thích với hầu hết các ngôn ngữ và khuôn khổ lập trình phía máy chủ .


1

Điều này đã làm việc cho tôi:

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

Và điều này cho PHP của bạn :

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

1

Sử dụng chức năng tích hợp sẵn của PHP để thêm toán hạng mảng vào tên biến mong muốn.

Nếu chúng ta thêm các giá trị vào một mảng Javascript như sau:

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

Nó có thể được gửi đến máy chủ như sau:

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

Chú ý các trích dẫn xung quanh các hoạt động []. Các giá trị sẽ có sẵn như sau:

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

0

Điều này là do PHP đọc giá trị của bạn dưới dạng một chuỗi. Nếu tôi không muốn chuyển dữ liệu của mình dưới dạng một đối tượng (giống như trong các câu trả lời trước, điều này cũng tốt), tôi chỉ cần thực hiện điều này trong PHP của mình:

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

Dòng cuối cùng chia chuỗi thành các bit sau mỗi dấu phẩy. Bây giờ $ activityArray cũng là một mảng. Nó hoạt động ngay cả khi không có dấu phẩy (chỉ một phần tử trong mảng javascript của bạn).

Chúc bạn viết mã vui vẻ!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.