1

我正在尝试这样做:

我有一个 php 全局变量$currentID,并使用一个简单的 jquery 脚本检查 url 的哈希中是否有“id”(页面),如果是,我想将该值赋予$currentID. 我读了很多书,我注意到我将使用 Ajax,但我没有管理它。

我现在的代码是:

<script type="text/javascript">
$(document).ready(function(){
   if (parent.location.hash != '' ) {
     var theCurrentID = parent.location.hash.split('#')[1];
      $.ajax({
            url: 'my.php', //current page
            type: 'post',
            data: {theID: theCurrentID },
            datatype: 'json',
            success: function () {

            }
        });
   }
  // your code here
});
</script>

请问你能帮帮我吗?先感谢您。

4

1 回答 1

4

PHP 是一种服务器端语言,这意味着一旦将其数据发送到浏览器,PHP 变量和数据就无法更改...

但是,使用 AJAX,您可以向 PHP 页面发送另一个请求,并根据结果更改 DOM 中的数据。

考虑一下:

var id = parent.location.hash.split('#')[1];;

$.ajax({
    url: 'http://www.example.net/id.php',
    dataType: 'JSON',
    data: {id: id},
    success: function(data){
        // Do whatever you want with you JSON object
        // The following will log what has been returned
        console.log(data);
        // If you want to update your id variable then simply do this
        id = data.id;
        // You can then change elements in the DOM that reflect what your PHP
        // variable originally set
        $('#id').text(id);
    }
});

以下将包括$currentID页面加载时发送的内容...但是,您可以使用上述脚本更新此文本。

<p>My current ID is: <span id="id">$currentID</span></p>

请注意:这不会更新 PHP 变量,因为一旦 PHP 将数据发送到浏览器,脚本已终止并且无法修改,也无法访问变量。上面的脚本将简单地更新 HTML 中的文本。

服务器端脚本

在开始编写 PHP 之前,您需要了解服务器端脚本的功能,它非常基础:

  1. 您发送请求到my.php
  2. 该请求发送到 PHP 生成 HTML 的服务器,它将把您指定的任何变量写入 HTML
  3. 然后将数据作为 HTML而非 PHP发送回浏览器,您可以在浏览器中使用 javascript 对 DOM 进行更改。

底线是,一旦 PHP 生成了您的页面数据并将其发送到浏览器,那么该页面上就与 PHP 无关!它是纯 HTML,或者它可能是任何其他类型的文档......

另一种解释方式是:

你的服务器看到 PHP 页面是这样的:

echo "<p>My current ID is: <span id=\"id\">$currentID</span></p>";

您的浏览器(javascript 看到它的地方)看到这样的页面

<p>My current ID is: <span id="id">1</span></p>

没有可访问的 PHP 变量,它根本不存在!

有关详细信息,请参阅以下内容:

https://softwareengineering.stackexchange.com/questions/171203/what-are-the-difference-between-server-side-and-client-side-programming

于 2013-05-16T11:50:26.100 回答