Hướng dẫn can i pass php variable to javascript? - tôi có thể chuyển biến php sang javascript không?

Tôi sẽ thử một câu trả lời đơn giản hơn:

Giải thích về vấn đề

Trước tiên, hãy hiểu luồng các sự kiện khi một trang được phục vụ từ máy chủ của chúng tôi:

  • PHP đầu tiên được chạy, nó tạo ra HTML được phục vụ cho máy khách.
  • Sau đó, HTML được gửi cho máy khách, sau khi PHP được thực hiện với nó, tôi muốn nhấn mạnh rằng một khi mã rời khỏi máy chủ - PHP được thực hiện với nó và không còn có thể truy cập nó nữa.
  • Sau đó, HTML với JavaScript tiếp cận máy khách, có thể thực thi JavaScript trên HTML đó.

Vì vậy, thực sự, điều cốt lõi cần nhớ ở đây là HTTP là không quốc tịch. Khi yêu cầu rời khỏi máy chủ, máy chủ không thể chạm vào nó. Vì vậy, điều đó để lại các lựa chọn của chúng tôi để:HTTP is stateless. Once a request left the server, the server can not touch it. So, that leaves our options to:

  1. Gửi thêm yêu cầu từ khách hàng sau khi yêu cầu ban đầu được thực hiện.
  2. Mã hóa những gì máy chủ đã nói trong yêu cầu ban đầu.

Các giải pháp

Đó là câu hỏi cốt lõi mà bạn nên tự hỏi mình là:

Tôi đang viết một trang web hoặc một ứng dụng?

Các trang web chủ yếu dựa trên trang và thời gian tải trang cần phải nhanh nhất có thể [ví dụ: Wikipedia]. Các ứng dụng web là AJAX nặng hơn và thực hiện rất nhiều chuyến đi tròn để có được thông tin nhanh của khách hàng [ví dụ: bảng điều khiển chứng khoán].

Trang mạng

Gửi nhiều yêu cầu hơn từ khách hàng sau khi yêu cầu ban đầu được thực hiện chậm vì nó yêu cầu nhiều yêu cầu HTTP có chi phí đáng kể. Hơn nữa, nó đòi hỏi sự không đồng bộ vì việc đưa ra yêu cầu AJAX yêu cầu một người xử lý khi hoàn thành.slow as it requires more HTTP requests which have significant overhead. Moreover, it requires asynchronousity as making an AJAX request requires a handler for when it's complete.

Tôi không khuyên bạn nên thực hiện một yêu cầu khác trừ khi trang web của bạn là một ứng dụng để lấy thông tin đó từ máy chủ.

Bạn muốn thời gian phản hồi nhanh có tác động rất lớn đến thời gian chuyển đổi và tải. Thực hiện các yêu cầu AJAX chậm cho thời gian hoạt động ban đầu trong trường hợp này và không cần thiết.

Bạn có hai cách để giải quyết vấn đề

  • Đặt cookie - cookie là các tiêu đề được gửi trong các yêu cầu HTTP mà cả máy chủ và máy khách đều có thể đọc. - cookies are headers sent in HTTP requests that both the server and client can read.
  • Mã hóa biến là JSON - JSON trông rất gần với các đối tượng JavaScript và hầu hết các đối tượng JSON là các biến JavaScript hợp lệ. - JSON looks very close to JavaScript objects and most JSON objects are valid JavaScript variables.

Đặt cookie thực sự không khó lắm, bạn chỉ cần gán cho nó một giá trị:

setcookie["MyCookie", $value]; // Sets the cookie to the value, remember, do not
                               // Set it with HTTP only to true.

Sau đó, bạn có thể đọc nó bằng JavaScript bằng document.cookie:

Dưới đây là một trình phân tích cú pháp cuộn ngắn, nhưng câu trả lời tôi đã liên kết với ngay trên này đã được thử nghiệm tốt hơn:

var cookies = document.cookie.split[";"].
    map[function[el]{ return el.split["="]; }].
    reduce[function[prev,cur]{ prev[cur[0]] = cur[1]; return prev },{}];
alert[cookies["MyCookie"]]; // Value set with PHP.

Cookie là tốt cho một ít dữ liệu. Đây là những gì dịch vụ theo dõi thường làm.

Khi chúng tôi có nhiều dữ liệu hơn, chúng tôi có thể mã hóa nó với JSON bên trong biến JavaScript thay thế:


    var myServerData = ; // Don't forget to sanitize
                                                 //server data

Giả sử $valuejson_encode có thể ở phía PHP [thường là]. Kỹ thuật này là những gì Stack Overflow làm với trò chuyện của nó chẳng hạn [chỉ sử dụng .NET thay vì PHP].

Đăng kí

Nếu bạn đang viết một ứng dụng - đột nhiên thời gian tải ban đầu không phải lúc nào cũng quan trọng bằng hiệu suất liên tục của ứng dụng và nó bắt đầu trả hết để tải dữ liệu và mã riêng biệt.

Câu trả lời của tôi ở đây giải thích cách tải dữ liệu bằng AJAX trong JavaScript:

function callback[data]{
    // What do I do with the response?
}

var httpRequest = new XMLHttpRequest;
httpRequest.onreadystatechange = function[]{
    if [httpRequest.readyState === 4] { // Request is done
        if [httpRequest.status === 200] { // successfully
            callback[httpRequest.responseText]; // We're calling our method
        }
    }
};
httpRequest.open['GET', "/echo/json"];
httpRequest.send[];

Hoặc với jQuery:

$.get["/your/url"].done[function[data]{
    // What do I do with the data?
}];

Bây giờ, máy chủ chỉ cần chứa một tuyến/tệp /your/url có chứa mã lấy dữ liệu và thực hiện một cái gì đó với nó, trong trường hợp của bạn:

Bài Viết Liên Quan

Chủ Đề