2011-06-18 76 views
22

Tôi có một trang như sau;Nhận dữ liệu từ mảng php - AJAX - jQuery

<head> 
<script type="text/javascript" src="jquery-1.6.1.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
$('#prev').click(function() { 
    $.ajax({ 
    type: 'POST', 
    url: 'ajax.php', 
    data: 'id=testdata', 
    cache: false, 
    success: function(result) { 
    $('#content1').html(result[0]); 
    }, 
    }); 
}); 
}); 
</script> 
</head> 
<body> 
<table> 
<tr> 
<td id="prev">prev</td> 
<td id="content1">X</td> 
<td id="next">next</td> 
</tr> 
</table> 
</body> 

và tệp php ajax.php để xử lý yêu cầu ajax;

<?php 
$array = array(1,2,3,4,5,6); 
echo $array; 
?> 

Nhưng khi tôi nhấp, tôi nhận được A thay vì mảng [0]. Làm thế nào tôi có thể sửa lỗi này??

Cảm ơn trước ...

Trả lời

50

bạn không thể truy cập mảng (php mảng) từ js thử

<?php 
$array = array(1,2,3,4,5,6); 
echo json_encode($array); 
?> 

và js

$(document).ready(function() { 
    $('#prev').click(function() { 
     $.ajax({ 
      type: 'POST', 
      url: 'ajax.php', 
      data: 'id=testdata', 
      dataType: 'json', 
      cache: false, 
      success: function(result) { 
       $('#content1').html(result[0]); 
      }, 
     }); 
    }); 
}); 
+0

Vâng, nó cũng là câu trả lời tôi đang tìm kiếm. Cảm ơn ~ –

+0

Tuyệt vời, cảm ơn bạn! –

0

Khi bạn làm echo $array;, PHP sẽ chỉ đơn giản là echo 'mảng' vì nó không thể chuyển đổi một mảng thành một chuỗi. Vì vậy, 'A' mà bạn đang thực sự nhận được là chữ cái đầu tiên của mảng, đó là chính xác.

Bạn thực sự có thể cần

echo json_encode($array); 

này sẽ giúp bạn có những gì bạn muốn.

EDIT: Và rõ ràng, bạn sẽ cần phải thay đổi JS của bạn để làm việc với JSON thay vì chỉ văn bản (như chỉ ra bởi @genesis)

+0

nó sẽ không làm việc như JSON phải được giải mã bởi js;) – genesis

+0

@genesis, bạn nói đúng. Lưu ý trong câu trả lời, cảm ơn. – JohnP

8

Khi bạn echo $array;, kết quả là Array, result[0] sau đó đại diện cho ký tự đầu tiên trong ArrayA.

Một cách để xử lý vấn đề này sẽ là như thế này:

ajax.php

<?php 
$array = array(1,2,3,4,5,6); 
foreach($array as $a) 
    echo $a.","; 
?> 

mã jquery

$(function(){ /* short for $(document).ready(function(){ */ 

    $('#prev').click(function(){ 

     $.ajax({type: 'POST', 
       url:  'ajax.php', 
       data: 'id=testdata', 
       cache: false, 
       success: function(data){ 
        var tmp = data.split(","); 
        $('#content1').html(tmp[0]); 
       } 
       }); 
    }); 

}); 
3

bạn không thể truy cập mảng (php mảng) từ js thử

<?php 
$array = array(1,2,3,4,5,6); 
echo implode('~',$array); 
?> 

và js

$(document).ready(function() { 
$('#prev').click(function() { 
    $.ajax({ 
    type: 'POST', 
    url: 'ajax.php', 
    data: 'id=testdata', 
    cache: false, 
    success: function(data) { 
    result=data.split('~'); 
    $('#content1').html(result[0]); 
    }, 
    }); 
}); 
}); 
16

khá có thể là phương pháp đơn giản nhất ...

<?php 
$change = array('key1' => $var1, 'key2' => $var2, 'key3' => $var3); 
echo json_encode(change); 
?> 

Sau đó kịch bản jquery ...

<script> 
$.get("location.php", function(data){ 
var duce = jQuery.parseJSON(data); 
var art1 = duce.key1; 
var art2 = duce.key2; 
var art3 = duce.key3; 
}); 
</script> 
+2

+1 cho 'jQuery.parseJSON (dữ liệu);' nó hoạt động với tôi –

+1

+ 1 cho 'jQuery.parseJSON (dữ liệu); 'giải quyết vấn đề của tôi !! –

+0

Cảm ơn rất nhiều :) đã làm việc cho tôi. – Dave

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