【问题标题】:console.log shows the data but php echo does notconsole.log 显示数据,但 php echo 不显示
【发布时间】:2014-07-19 14:20:19
【问题描述】:

index.php

<body>
<script>
var h = $(window).height();
alert (h); // works fine - result is 580
$.ajax({
    type: "POST",
    url: 'pass.php',
    data: {h : h},
    success:(function(data){
        console.log(data);  // works fine - 580
    })
});
</script>

<?php
include ("pass.php");
echo $h;  // doesn't work. there is no echo of 580
echo "323"; // this works as a test
?>

pass.php

$h = $_POST['h'];
echo $h;

那么,为什么我无法在index.php 中得到echo $h; 的结果580

【问题讨论】:

  • 我认为您误解了 AJAX 的工作原理。你有没有遵循任何教程?
  • pass.php 包含$_POST['h'] = 580; 时,它作为测试$_POST['h'] = 580; $h = $_POST['h']; echo $h; 对我来说效果很好。所以,你在某个地方做错了什么。参考昆汀的回答。
  • @ÁlvaroG.Vicario,因为在控制台中我看到580 结果。

标签: php jquery ajax


【解决方案1】:

您正在发出 两个 HTTP 请求。

第一个请求是对index.php 的GET 请求。该脚本includes pass.php 读取自$_POST。但是,这一次,$_POST 没有填充,因为它是一个 GET 请求。 $h 因此没有得到值。

第二个请求是对pass.php 的 POST 请求(来自 JavaScript)。这次填充了$_POST

Ajax 不会追溯更改服务器先前发送给浏览器以获取较早请求的内容。如果您想更改用户在响应 Ajax 时看到的内容,那么您需要使用 JavaScript(在您的成功函数中)更改 DOM。

【讨论】:

  • 昆汀,我不想改变 DOM。我只需要580 作为 php 变量,用于另一个 php 计算。
  • @bonaca — 正如您已经注意到的那样,您可以在第二个请求中使用它(您的响应是 console.loging)。
  • Quentin,但是如何在 php 代码中获取这个值,作为 php 变量?
  • @bonaca — 它在 PHP 代码中作为 PHP 变量……用于第二个请求。您无法从第一个请求中获得它,因为在您响应该请求之前您还没有向浏览器请求它。
  • 昆汀,对不起,我不完全明白你在说什么,但我会努力的。无论如何,非常感谢您的努力。
【解决方案2】:

让我们考虑一下。首先,PHP创建以下PHP代码:

<?php
include ("pass.php"); // Okay, is an include in here, let's include the file
echo $h;
echo "323";
?>

包括后:

<?php
$h = $_POST['h']; // Produces E_NOTICE because no index 'h' found
echo $h; // null
echo $h; // null
echo "323"; // 323
?>

所以结果是323。 PHP 代码中没有给出 POST 数据,所以 $_POST["h"] 为空并且没有回显。您的 ajax 调用会发送 POST 数据,因此会在 PHP 中打印。

【讨论】:

  • 为什么$_POST ["h"] = null 的结果?
  • @bonaca: $_POST["h"] 为空,因为第一个请求是 GET 请求并且没有给 PHP POST 数据。 GET 请求是发生的常规请求,即单击链接时。 POST 请求发生,即在提交带有 method="post" 的表单时。
  • 那么,如何将这个580 作为一个php 变量?
  • @bonace:不要包含 pass.php 并在 PHP 中使用 echo。当用户加载页面时,在页面中打印$(window).height值。
  • 用户...,我需要该值作为 php 变量,以便在 php 代码中进行另一个计算。
【解决方案3】:
data: {h : h}

这个帖子不是 580 : 580 吗?试试

data: {"h" : h}

【讨论】:

  • 不,不是。对象字面量中: 左侧的标识符是属性名称而不是变量名称。
猜你喜欢
  • 2011-09-08
  • 2015-12-08
  • 2021-07-18
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多