0 Câu hỏi: Có cách nào để biến biến javascript thành biến php không? [bản sao]

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi có mã này:

<script type="text/javascript">
    var foo = 'bar';
    <?php
        file_put_contents('foo.txt', ' + foo + ');
    ?>

    var baz = <?php echo 42; ?>;
    alert(baz);
</script>

Tại sao điều này không ghi "thanh" vào tệp văn bản của tôi, nhưng cảnh báo "42"?

NB: Các bản sửa đổi trước đó của câu hỏi này rõ ràng về PHP trên máy chủ và JavaScript trên máy khách. Bản chất cơ bản của vấn đề và giải pháp là giống nhau đối với bất kỳ cặp ngôn ngữ nào khi một ngôn ngữ đang chạy trên máy khách và ngôn ngữ kia trên máy chủ. Vui lòng đưa tài khoản này vào tài khoản khi bạn thấy câu trả lời nói về các ngôn ngữ cụ thể.

    
443
  1. file_put_contents phải được chỉnh sửa để có một số khả năng thực sự tham chiếu biến foo. Như vậy, nó chỉ là viết một chuỗi tĩnh vào tệp và thực sự không thể hiện vấn đề thực thi phía máy chủ so với phía máy khách.
    2014-05-12 19: 02: 15Z
  2. @ Andrew Đó là điểm, có không có khả năng. Đó là một mã mẫu để giới thiệu vấn đề. Nếu bạn có đề xuất tốt hơn, vui lòng chỉnh sửa nó.
    2014-05-12 19: 23: 05Z
5 Câu trả lời                              5                         

Mã của bạn được chia thành hai phần hoàn toàn riêng biệt, phía máy chủ phía máy khách .

                    |
               ---------->
              HTTP request
                    |
+--------------+    |    +--------------+
|              |    |    |              |
|    browser   |    |    |  web  server |
| (JavaScript) |    |    |  (PHP etc.)  |
|              |    |    |              |
+--------------+    |    +--------------+
                    |
  client side       |      server side
                    |
               <----------
          HTML, CSS, JavaScript
                    |

Hai bên liên lạc qua các yêu cầu và phản hồi HTTP. PHP được thực thi trên máy chủ và xuất ra một số mã HTML và có thể là mã JavaScript được gửi dưới dạng phản hồi cho máy khách nơi HTML được diễn giải và JavaScript được thực thi. Khi PHP hoàn thành xuất ra phản hồi, tập lệnh kết thúc và sẽ không có gì xảy ra trên máy chủ cho đến khi có yêu cầu HTTP mới.

Mã ví dụ thực thi như thế này:

<script type="text/javascript">
    var foo = 'bar';
    <?php
        file_put_contents('foo.txt', ' + foo + ');
    ?>

    var baz = <?php echo 42; ?>;
    alert(baz);
</script>

Bước 1, PHP thực thi tất cả mã giữa các thẻ <?php ?>. Kết quả là thế này:

<script type="text/javascript">
    var foo = 'bar';

    var baz = 42;
    alert(baz);
</script>

Cuộc gọi file_put_contents không dẫn đến kết quả gì, nó chỉ ghi "+ foo +" vào một tệp. Cuộc gọi <?php echo 42; ?> dẫn đến đầu ra "42", hiện đang ở vị trí mà mã được sử dụng.

Mã HTML /JavaScript kết quả này hiện được gửi đến máy khách, nơi nó được đánh giá. Cuộc gọi alert hoạt động, trong khi biến foo không được sử dụng ở bất cứ đâu.

Tất cả mã PHP được thực thi trên máy chủ trước khi máy khách thậm chí bắt đầu thực thi bất kỳ JavaScript nào. Không còn mã PHP nào trong phản hồi mà JavaScript có thể tương tác.

Để gọi một số mã PHP, khách hàng sẽ phải gửi yêu cầu HTTP mới đến máy chủ. Điều này có thể xảy ra bằng một trong ba phương pháp có thể:

  1. Một liên kết, khiến trình duyệt tải một trang mới.
  2. Gửi biểu mẫu, gửi dữ liệu đến máy chủ và tải trang mới.
  3. Yêu cầu AJAX , đây là một kỹ thuật Javascript để tạo HTTP thông thường yêu cầu đến máy chủ (như 1. và 2. sẽ), nhưng không rời khỏi trang hiện tại.

Bạn cũng có thể sử dụng JavaScript để làm cho trình duyệt mở một trang mới bằng cách sử dụng window.location hoặc gửi biểu mẫu, mô phỏng các khả năng 1. và 2.

    
417
2017-05-23 12: 02: 56Z
  1. Bạn cũng có thể mở trang thứ hai bằng cách sử dụng window.open hoặc tải trang bằng iframe.
    2016-04-25 07: 51: 09Z
  2. Có thể đáng để thêm WebSockets vào danh sách các phương thức liên lạc.
    2016-12-19 08: 45: 36Z
  3. Điều gì xảy ra nếu giả sử các giá trị thả xuống được cập nhật qua jquery. Khi người dùng thực hiện bước 2. Gửi biểu mẫu, gửi data đến máy chủ và tải một trang mới, thông qua nút "Gửi" liệu các giá trị được cập nhật của jquery có thể được chuyển đến bộ điều khiển trong php không? Hoặc họ sẽ không hiển thị với php vì nó đã được thêm vào dom thông qua jquery? @deceze
    2018-10-02 22: 33: 34Z
  4. @ Fabricio Một yêu cầu HTTP sẽ được tạo từ dữ liệu <form> và được gửi đến máy chủ. Bạn có thể thao tác các biểu mẫu bằng Javascript để chúng chứa các dữ liệu khác nhau. Có, dữ liệu đó sẽ là một phần của yêu cầu HTTP kết quả nếu đó là một phần chính xác của biểu mẫu khi nó được gửi; không quan trọng là nó có trong HTML gốc hay được thêm vào sau đó thông qua Javascript.
    2018-10-03 07: 30: 08Z

Để xác định lý do tại sao mã PHP không hoạt động trong mã JavaScript chúng ta cần hiểu phía máy khách phía máy chủ ngôn ngữ là và cách chúng hoạt động.

Ngôn ngữ phía máy chủ (PHP, v.v.) : Họ truy xuất các bản ghi từ cơ sở dữ liệu, duy trì trạng thái qua statless HTTP kết nối và làm rất nhiều việc cần bảo mật. Họ cư trú trên máy chủ, các chương trình này không bao giờ có mã nguồn của họ tiếp xúc với người dùng.

  

Hình ảnh từ wikipedia_http: //en.wikipedia.org/wiki/File: Scheme_dynamic_page_en.svg > attr hình ảnh

Vì vậy, bạn có thể dễ dàng thấy rằng các ngôn ngữ phía máy chủ xử lý các yêu cầu HTTP và xử lý chúng, và, như @deceze đã nói, PHP được thực thi trên máy chủ và xuất ra một số HTML và có thể là mã JavaScript, được gửi dưới dạng phản hồi cho khách hàng, nơi HTML được diễn giải và JavaScript được thực thi.

Mặt khác,

Ngôn ngữ phía máy khách (như JavaScript) nằm trong trình duyệt và chạy trong trình duyệt. Kịch bản phía máy khách thường đề cập đến lớp chương trình máy tính trên web được thực thi phía máy khách, bởi trình duyệt web của người dùng, thay vì phía máy chủ .

JavaScript hiển thị cho người dùng và có thể dễ dàng sửa đổi, vì vậy đối với nội dung bảo mật, chúng ta không được dựa vào JavaScript.

Vì vậy, khi bạn thực hiện yêu cầu HTTP trên máy chủ, trước tiên, máy chủ sẽ đọc tệp PHP một cách cẩn thận để xem liệu có bất kỳ tác vụ nào cần được thực hiện hay không và gửi phản hồi cho phía máy khách. Một lần nữa, như @deceze đã nói, * Khi PHP kết thúc phản hồi, tập lệnh kết thúc và sẽ không có gì xảy ra trên máy chủ cho đến khi có yêu cầu HTTP mới xuất hiện. *

  

Biểu diễn đồ họa

     

Nguồn hình ảnh

Vậy bây giờ tôi có thể làm gì nếu tôi cần gọi PHP? Nó phụ thuộc vào cách bạn cần thực hiện: bằng cách tải lại trang hoặc bằng cách sử dụng cuộc gọi AJAX.

  1. Bạn có thể làm như vậy bằng cách tải lại trang và gửi yêu cầu HTTP
  2. Bạn có thể thực hiện cuộc gọi AJAX bằng JavaScript - điều này không yêu cầu tải lại trang

Đọc tốt:

  1. Wikipedia: Kịch bản phía máy chủ
  2. Wikipedia: Tập lệnh phía máy khách
151
2019-03-25 21: 16: 09Z

Javascript của bạn sẽ thực thi trên máy khách, không phải trên máy chủ. Điều này có nghĩa là foo không được đánh giá ở phía máy chủ và do đó giá trị của nó không thể được ghi vào một tệp trên máy chủ.

Cách tốt nhất để suy nghĩ về quy trình này là nếu bạn đang tạo một tệp văn bản một cách linh hoạt. Văn bản bạn đang tạo chỉ trở thành mã thực thi khi trình duyệt diễn giải nó. Chỉ những gì bạn đặt giữa các thẻ <?php mới được đánh giá trên máy chủ.

Nhân tiện, tạo thói quen nhúngng các đoạn logic PHP ngẫu nhiên trong HTML hoặc Javascript có thể dẫn đến mã bị sai lệch nghiêm trọng. Tôi nói từ kinh nghiệm đau đớn.

    
25
2012-12-12 13: 46: 38Z
  1. Câu trả lời của bạn ở đây rất đáng chú ý vì nó được đề cập đến /một interpeter. Tuy nhiên, javascript có thể được biên dịch và chạy trong môi trường máy chủ và nó cũng có thể được xen kẽ bởi một máy chủ.
    2015-03-10 17: 10: 25Z

Trong ứng dụng web, mọi tác vụ đều được thực thi theo cách yêu cầu và phản hồi.

Lập trình phía máy khách là với mã html với tập lệnh Java và các khung công tác, thư viện thực thi trong trình duyệt internet explorer, Mozilla, trình duyệt chrome. Trong kịch bản java Các máy chủ lập trình phía máy chủ thực thi trong Tomcat, web-logic, j boss, WebSphere sever

    
3
2016-07-13 09: 26: 43Z

Tôi sẽ cố gắng giải thích nó theo cách đơn giản.

Phía khách hàng là những gì người dùng nhìn thấy /mã hiển thị trên trình duyệt.

Lập trình phía máy khách bao gồm HTML (HTML, HTML5, DHTML), CSS (CSS, CSS3) và JavaScript (JavaScript, ES5, ES6, ES7, TypeScript, JQuery, ReactJs, AngularJs, BackboneJs hoặc bất kỳ khung công tác JavaScript nào khác ).

Lập trình phía khách hàng tập trung vào "trang sẽ trông như thế nào" và hành vi của nó trên các trình duyệt.

  1. HTML là những gì chúng ta thấy.
  2. CSS quyết định thiết kế của nó (Màu sắc, Hình ảnh nổi, Đệm, v.v.).
  3. Thông tin trang theo dõi JavaScript. Tất cả các lệnh gọi API và duy trì dữ liệu qua DOM được thực hiện bằng JavaScript.

Lập trình phía máy chủ bao gồm mã cung cấp dữ liệu cho phía máy khách. Người dùng không bao giờ có thể nhìn thấy phía máy chủ.

Lập trình phía máy chủ bao gồm Ngôn ngữ lập trình (Java, PHP, .Net, C #, C, C ++, NodeJS, v.v.), Cơ sở dữ liệu (SQL, Oracle, MySql, PostgreySql, No-Sql, MongoDB, v.v.), API của bên thứ ba ( Nghỉ ngơi, xà phòng), Logic kinh doanh.

Lập trình phía máy chủ tập trung vào "cách cung cấp dữ liệu cho phía khách hàng".

  1. Ngôn ngữ phía máy chủ chịu trách nhiệm liên lạc giữa các nguồn dữ liệu khác nhau như cơ sở dữ liệu, API của bên thứ ba, hệ thống tệp, blockchain, v.v. Các ngôn ngữ này duy trì API nhất định để phía khách hàng tương tác với.
  2. Cơ sở dữ liệu chịu trách nhiệm lưu trữ thông tin.
  3. Logic nghiệp vụ định nghĩa "cách sử dụng dữ liệu và phải làm gì với dữ liệu".

Dữ liệu yêu cầu phía máy khách hoặc yêu cầu lưu trữ dữ liệu, từ phía máy chủ thông qua API do phía máy chủ cung cấp. Yêu cầu và phản hồi dữ liệu này được thực hiện bằng cách tuân theo giao thức HTTP /FTP như API REST, SOAP API.

    
0
2018-08-22 17: 17: 26Z
  1. Mặc dù điều này cố gắng trả lời câu hỏi được đặt ra trong tiêu đề, nhưng nó hoàn toàn bỏ qua chi tiết của nội dung câu hỏi nên hoàn toàn không giải quyết vấn đề.
    2018-10-22 11: 20: 58Z
nguồn đặt đây