2012-01-11 55 views
43

Tôi đang tìm kiếm một giải pháp tốt hơn để thực hiện cuộc gọi AJAX với jQuery, có tệp PHP trả về một mảng và đưa nó ra phía máy khách dưới dạng một mảng Javascript. Dưới đây là những gì tôi đã làm điều này:Cách trả về mảng từ cuộc gọi AJAX?

PHP File (Example.php):

<?php 
    $id_numbers = array('NES-ZL','NES-AL','SNS-ZL'); 

    for ($i=0; $i<count($the_array); $i++){ 
     echo $id_numbers[$i]; 
     echo '|'; 
    } 
?> 

JS File:

id_numbers = new Array(); 
$.ajax({ 
    url:"Example.php", 
    type:"POST", 
    success:function(msg){ 
     id_numbers = msg.split('|'); 
    } 
}); 

phương pháp hiện tại của tôi chỉ là một chút quá phức tạp cho hương vị của tôi .

Những gì tôi muốn làm là để có thể chỉ

return $id_numbers; 

ở phía bên PHP và trực tiếp dịch nó vào một mảng javascript sau khi cuộc gọi AJAX.

Ý tưởng, bất kỳ ai?

+2

Y U KHÔNG SỬ DỤNG JSON? – jAndy

Trả lời

98

Sử dụng JSON để chuyển các loại dữ liệu (mảng và đối tượng) giữa máy khách và máy chủ.

Trong PHP:

Trong JavaScript:

PHP:

echo json_encode($id_numbers); 

JavaScript:

id_numbers = JSON.parse(msg); 

Như Wolfgang đã đề cập, bạn có thể cho một tham số thứ tư để jQuery để tự động giải mã JSON cho bạn.

id_numbers = new Array(); 
$.ajax({ 
    url:"Example.php", 
    type:"POST", 
    success:function(msg){ 
     id_numbers = msg; 
    }, 
    dataType:"json" 
}); 
+0

Vô cùng hữu ích! Nó chắc chắn sẽ làm mọi thứ đơn giản và đẹp hơn. –

+1

@k_sel nó khá là một tiêu chuẩn công nghiệp. Mọi người đều sử dụng điều này cho AJAX. Bạn sẽ nhận thấy rằng JSON cũng là JavaScript hợp lệ. –

+1

Đừng quên sử dụng 'async: false' – Yuri

9

Hãy xem json_encode() bằng PHP. Bạn có thể nhận được $ .ajax để nhận ra điều này với tham số dataType: "json".

0

Hãy xem json_encode (http://php.net/manual/en/function.json-encode.php). Nó có sẵn như là PHP 5.2. Sử dụng tham số dataType: 'json' để phân tích cú pháp cho bạn. Bạn sẽ có Object làm đối số đầu tiên thành công rồi. Để biết thêm thông tin có một cái nhìn tại jQuery-tài liệu: http://api.jquery.com/jQuery.ajax/

0

Php có chức năng siêu sexy cho điều này, chỉ cần vượt qua mảng với nó:

$json = json_encode($var); 

$.ajax({ 
url:"Example.php", 
type:"POST", 
dataType : "json", 
success:function(msg){ 
    console.info(msg); 
} 
}); 

simples :)

1

@ Xeon06, tốt đẹp nhưng cũng giống như một fyi cho những người đọc chủ đề này và cố gắng như tôi ... khi trả về mảng từ php =>json_encode($theArray). chuyển đổi thành một chuỗi mà tôi không dễ dàng thao tác đặc biệt cho người dùng js mềm như tôi.

Bên trong js, bạn đang cố gắng lấy giá trị mảng và/hoặc khóa của mảng u r tốt hơn bằng cách sử dụng JSON.parse như trong var jsArray = JSON.parse(data) trong đó dữ liệu là mảng trả về từ php. chuỗi mã hóa json được chuyển đổi thành đối tượng js mà bây giờ có thể được thao tác dễ dàng.

ví dụ: foo = {một: 1, hai: 2, ba: 3} - nhận sau JSON.parse

for (key in foo){ console.log("foo["+ key +"]="+ foo[key]) } - in lên bảng điều khiển firebug ur. thì đấy!

+0

Lạ lùng, nếu bạn đang làm việc với các mảng đa chiều, hãy thử và 'json_encode' các mảng bên trong, do đó' $ parent_array = array (json_encode ($ child_array)); '. Nó hoạt động trong trường hợp của tôi. –

Các vấn đề liên quan