2008-12-26 38 views
18

Vì vậy, tôi có một mảng bản ghi được truy xuất từ ​​cơ sở dữ liệu. Mảng có định dạng;Cách tốt nhất để chuyển mảng giữa PHP và Javascript

$rows[0]['id']=1; 
$rows[0]['title']='Abc'; 
$rows[0]['time_left']=200; 


$rows[1]['id']=2; 
$rows[1]['title']='XYZ'; 
$rows[1]['time_left']=300; 
//And so on upto 10-20 rows 

Cách tốt nhất để chuyển mảng này sang mã javascript của tôi là gì? Tôi muốn javascript có thể lặp qua tất cả các bản ghi và sử dụng thuộc tính 'id', cập nhật div với id đó bằng một số thông tin.

Mã javascript của tôi nằm trong tệp .js bên ngoài, nhưng tôi có thể thực thi mã php trong mã HTML của trang của tôi. Vì vậy, tôi có thể làm một cái gì đó như thế này:

Trong my_file.js:

var rows=New Array(); 

Trong HTML:

<html> 
<head> 
<script type="text/javascript" src="js/my_file.js"></script> 

<script type="text/javascript"> 
<? foreach ($rows as $row):?> 
<? extract($row);?> 
rows[<?=$id;?>]['title']="<?=$title;?>"; 
//And so on 
<? endforeach;?> 
</script> 

Trả lời

28

tôi có xu hướng sử dụng một đối tượng JSON cho việc này:

  • Ở phía máy chủ, JSON mã hóa da của bạn ta: json_encode($data);
  • Về phía JavaScript, tôi viết một hàm lấy đối tượng JSON làm tham số và giải nén nó.

Khi bạn giải nén đối tượng, bạn có thể in nội dung của mảng thành một thẻ <DIV> hoặc bất kỳ nơi nào bạn muốn trên trang (jQuery thực hiện công việc khá ngọt ngào này).

+2

Làm thế nào để bạn giải nén các đối tượng JSON với javascript? Bạn có thể thêm một số mẫu mã cho điều đó và một mẫu của đối tượng giải nén cho câu trả lời của bạn không? Cảm ơn –

+0

Kiểm tra điều này: http://ditio.net/2008/07/17/php-json-and-javascript-usage/ – Stuart

+0

MooTools cũng thực hiện mã hóa/giải mã JSON: http://mootools.net/docs/core/Utilities/JSON – samvermette

1

Để theo dõi câu hỏi của bạn (và trả lời của tôi, tôi chạy ra khỏi không gian trên trả lời bình luận), đây là một tập hợp con rất đơn giản của các mã tôi sử dụng:

Javascript AJAX handler trong jQuery:

$.ajax({ 
    type: "POST", 
    url: "BACKEND.php", 
    timeout: 8000, 
    data: "var1=" + myVar, 
    dataType: "json", 
    error: function(){ 
    $("#DIVID").html("<div class='error'>Error!</div>"); 
    }, 
    success: function(jsonObj){ 
    $("#DIVID").html(jsonObj.mydata); 
    } 
}); 


PHP Array: 
$data['mydata'] = $myData; 
+0

Câu hỏi cuối cùng. Tôi đã cho nó một thử và bây giờ tôi nhận được một 'đối tượng' trong javascript có chứa mỗi hàng của tôi, vì vậy tôi nghĩ rằng tôi sẽ truy cập nó như myObj [0] .title hoặc myObj [1] .title. Câu hỏi là, nếu tôi muốn nhận được tiêu đề của một cái gì đó bằng ID của nó, làm thế nào tôi có thể tìm thấy nó. Id sẽ nằm trong myObj [1] .id hoặc myObj [0] .id –

+1

Thử thêm một khoảng thời gian Obj.1.id Thông tin thêm về ký hiệu JSON http://www.hunlock.com/blogs/Mastering_JSON_ (_JavaScript_Object_Notation_) xem: var myObject = {'color': 'blue', 'animal': {'dog': 'friendly'} }; document.writeln (myObject.animal.dog); // đầu ra thân thiện – barfoon

+0

Argh, lời xin lỗi của tôi về định dạng khủng khiếp ở đó. – barfoon

10

Nếu bạn đang làm dữ liệu nội tuyến, tôi đã luôn luôn thích làm

<script type="text/javascript"> 
window.sitescriptdata = {}; 
window.sitescriptdata.foo = (<?php echo json_encode($structure); ?>); 
</script> 

Đối với công cụ cơ bản, giúp bạn tiết kiệm làm một callback AJAX. Ngoài ra, nếu bạn muốn dán dữ liệu vào nút DOM, cách "metaobject" là thứ tôi thực sự yêu thích.

<div id="foobar"> 
<div><object class="metaobject"> 
     <param name="data" value="<?php echo htmlentities(json_encode($data), ENT_QUOTES);?>" /> 
</object></div> 
</div> 

Hiện tại, đây không phải là cách hiệu quả để kết hợp dữ liệu trực tiếp với nút DOM mà không cần biết đường dẫn duy nhất chính xác đến nút đó. Rất tiện dụng nếu bạn có nhiều bộ dữ liệu cần được đính kèm với các phần tử màn hình cụ thể.

Tôi thường sử dụng http://noteslog.com/metaobjects/ plugin cho jQuery, nhưng nó đơn giản như vậy tôi đã nhân dịp viết nó bản thân mình (đã có một thời gian tôi không thể tìm thấy các plugin, nhưng mới cách thức hoạt động)

Khi hoàn tất, có sẽ

$ ("div # foobar> div"). get(). dữ liệu. ($ yourarrayhere)

Hiển thị đối với mã của bạn.

0

im vẫn còn khá mới quá nói có lẽ phương pháp này không phải là an toàn nhất, nhưng bạn luôn có thể biến mảng javascript của bạn thành một chuỗi và sau đó vượt qua nó thông qua URL cho php để GET.

vậy:

for(var i=0;i < jsarray.length;i++) 
{ 
var x = jsarray[i]; 
urlstring += "myvalue[]="+x+"&"; 
} 

document.location.href = "mypage.php?"+urlstring; 

và sau đó là php sẽ là:

$phparray = $_GET['myvalue']; 

hy vọng rằng sẽ giúp

1

Trong một ví dụ AJAX như here bạn có thể giải quyết vấn đề này trên theo cách này:

tệp .php (hàm trả về ajax)

$myArray = array("object_id"=>1, "object_title"=>"Testobject"); 
return json_encode($myArray); 

.js file (javascript chức năng)

... 
if(g_httpRequest.readyState == 4) 
{ 
var jsonRes = JSON.parse(g_httpRequest.responseText); 
alert(jsonRes.object_title) 
} 
... 
Các vấn đề liên quan