2011-12-12 28 views
7

Nếu tôi tải một trang PHP với Jquery .load (file.php), tệp được bao gồm có sử dụng các biến php được định nghĩa trên trang gọi là load() không?Tải Jquery() và biến PHP

+2

Hi @ user1091856 - Chào mừng đến với SO. Thực hành tốt là chấp nhận câu trả lời nếu nó phù hợp với bạn (không chỉ câu hỏi này mà là bất kỳ câu hỏi nào trong số bốn câu hỏi trước của bạn). chúc mừng! – themerlinproject

Trả lời

13

Bạn đang hiểu nhầm những công việc như thế nào.

  • PHP chạy trước bất kỳ phản ứng trình duyệt được phát hành cho khách hàng, và tất cả các mã chạy trên máy chủ . Các biến được khai báo trong tệp PHP của bạn bị hủy sau khi tất cả các mã PHP đã được chạy; họ "biến mất".
  • Chạy JavaScript sau phản hồi của trình duyệt đã bắt đầu và tất cả mã chạy trên máy khách . Bằng cách "tải" kết quả đầu ra của tệp PHP, bạn sẽ không nhận được bất kỳ quyền truy cập nào vào các biến của PHP, chỉ là đầu ra.

Nếu bạn muốn chuyển biến nhất định từ PHP sang JavaScript, bạn có thể đổ một số lượng thành JSON trong kịch bản PHP của bạn, như vậy:

<?PHP 
    header("Content-Type: application/json"); 

    $myVariable = "hello world"; 

    echo json_encode(array(array("myVariable" => $myVariable))); 

    /* Output looks like this: 
     [ 
      { 
       "myVariable": "hello world" 
      } 
     ] 
    */ 
?> 

của bạn JavaScript/JSON nên tìm một cái gì đó như thế này:

$.getJSON("test.php", function(result) { 
    console.log(result[0].myVariable); 
}); 

Điều đó có hợp lý không?

+0

Tôi thích lời giải thích rõ ràng của bạn về * lý do tại sao * nó sẽ không hoạt động và đó là wny tôi upvoted câu trả lời. Nhưng mẹo của bạn để tạo ra JSON với các câu lệnh 'echo' đơn giản không bị bỏ qua là đáng sợ; đó là lý do tại sao [json_encode()] (http://php.net/json_encode) tồn tại. –

+0

Đúng vậy, tôi xin lỗi. Tôi chỉ cố gắng làm cho nó đủ dễ hiểu. Nó đã được một thời gian kể từ khi tôi đã sử dụng PHP, và tôi đã không trong quá khứ đã phải serialize JSON từ PHP, do đó, xấu của tôi. –

+0

Đã chỉnh sửa câu trả lời của tôi để sử dụng 'json_encode'. –

0

phạm vi biến trong tập lệnh PHP được tải bởi JavaScript khác với trang đã tải tập lệnh PHP, vì vậy câu trả lời là không.

nhưng bạn có thể xác định biến toàn cục hoặc sử dụng các biến siêu chung như ($_GET, $_POST, v.v.) để có được những gì bạn muốn.

+0

Bạn có thể xác định các biến được chuyển bởi Javascript trong trang động bằng cách sử dụng PHP. –

+0

@WatermarkStudios 'biến được thông qua bởi Javascript' là khác nhau từ những gì OP đang yêu cầu:' có thể bao gồm các tập tin sử dụng các biến php được định nghĩa trên trang gọi là load() '. – fardjad

+0

Bạn có thể sử dụng chúng chính xác cách TK Kocheran mô tả (mặc dù json_encode() được đánh giá cao). Bạn nói đúng rằng javascript không thể truy cập trực tiếp vào các biến PHP vì chuỗi tải trong chu trình RESPONSE, nhưng thêm một dòng PHP để định nghĩa một biến Javascript với cùng giá trị như biến PHP không phải là chưa từng nghe, cũng không là thực hành không tốt trừ khi giá trị của các biến PHP là nhạy cảm. Sử dụng các biến Session có lẽ sẽ là tốt nhất nếu dữ liệu nhạy cảm là một vấn đề. –

13

Không, bạn phải vượt qua các biến bạn muốn sử dụng để bạn file.php:

$('#yourdiv').load('file.php?var1=xyz&var2=xyz&var3=xyz'); 

Và sau đó bạn có thể GET những người trong file.php của bạn:

$var1 = $_GET['var1']; 
$var2 = $_GET['var2']; 
$var3 = $_GET['var3']; 

Nếu có một nhiều biến sau đó sử dụng phương thức POST:

$('#yourdiv').load('file.php', {var1:x, var2:y, var3:z}) 

Và sau đó nhận các biến trong file.php:

$var1 = $_POST['var1']; 
$var2 = $_POST['var2']; 
$var3 = $_POST['var3']; 
+0

Tác vụ này cũng vậy ... Tôi chỉ thay thế tệp ''file.php? Var1 = xyz & var2 = xyz & var3 = xyz'' bằng' file.php? Var1 = {$ xyz} & var2 = {$ xyz} & var3 = {$ xyz} ''nếu bạn đang sử dụng các biến được điền từ tệp PHP hiện tại. Một lần nữa, toàn bộ dòng sẽ phải được lặp lại từ bên trong các thẻ PHP. –

+0

Tôi đánh giá cao phương pháp này tốt hơn nhiều vì nó sử dụng hàm jQuery 'load' nguyên gốc. – RCNeil

0

Bạn sẽ phải chuyển các biến đó vào tệp PHP được tải thông qua hàm .load.

Ví dụ:

$("#objectID").load("test.php", { 'choices[]': ["{$choice1}", "{$choice2}"] }); 

Các biến được định nghĩa trong file PHP hiện tại sẽ trở thành một phần của Javascript rằng tải file PHP mới.

+0

Tất nhiên dòng này sẽ phải được lặp lại từ bên trong các thẻ PHP. –

5

Vâng, sử dụng tham số dữ liệu, xem http://api.jquery.com/load/:

$('#someelement').load(
    "test.php", 
    { 
     'key1': '<?php echo $value1; ?>', 
     'key2': '<?php echo $value2; ?>' 
    } 
); 

Các thông số được đưa lên các tập tin test.php và có thể truy cập như:

$_POST['key1'] 
$_POST['key2'] 
+0

Đây là một giải pháp sạch, nhưng hãy nhớ rằng nếu bạn muốn sử dụng các biến được định nghĩa trong tệp PHP hiện tại, bạn phải hoán đổi các giá trị với các biến PHP được lặp lại từ bên trong các thẻ PHP. –

0

Đối số thứ hai (params) của hàm tải JQuery phải là một đối tượng hoặc hàm gọi lại, nhưng cũng có thể là một chuỗi rỗng. Tùy thuộc vào điều đó, tải không gửi bài hoặc nhận yêu cầu.

Tôi đã có ý tưởng chuyển đổi tự động giữa nhận và đăng bài, (ví dụ: nếu tập hợp cookie), vì nhận được nhanh hơn và bộ nhớ cache khả dụng và bài đăng tiết kiệm hơn.

nó tồi tệ hơn để viết các chức năng tải bao gồm các nội dung bên trong hàm callback hai lần hơn để viết một cái gì đó như thế:

//get 
var url="cache_dir/my_bag.html"; 
var params=""; 
if(document.cookie){ 
    //post 
    url="post.php"; 
    params="{my:bag}"; 
    } 
$(selector).load(url,params,function(){ 
... 

    });