【问题标题】:Where do PHP echos go when you are posting to a page?当您发布到页面时,PHP 回声会去哪里?
【发布时间】:2022-01-31 22:55:03
【问题描述】:

这可能是一个愚蠢的问题。我对 PHP 相当陌生。我正在尝试从我要发布但实际上从未去过的页面中查看一些回声语句。我不能直接转到页面的网址,因为没有帖子信息它会中断。有没有办法在开发者控制台或其他任何地方查看 PHP 的回声?

这里是 Ajax:

function uploadImage(image) {
  
      var data = new FormData();
      data.append("image", image);

      imgurl = 'url';
      filepath = 'path';
      $.ajax({
        url: imgurl,
        cache: false,
        contentType: false,
        processData: false,
        data: data,
        type: "post",
        success: function(url) {
          var image = $('<img class="comment_image">').attr('src', path + url);
          $('#summernote').summernote("insertNode", image[0]);
        },
        error: function(data) {
          console.log(data);
        }
      });
    }

这里是php文件:

<?php
  $image = $_FILES['image']['name'];
  $uploaddir = 'path';
  $uploadfile = $uploaddir . basename($image);
  if( move_uploaded_file($_FILES['image']['tmp_name'],$uploadfile)) {
    echo $uploadfile;
  } else {
    echo "Unable to Upload";
  }
?>

所以这段代码运行良好,但我不确定回声最终在哪里以及如何查看它们,我想打印更多信息。请帮忙!

【问题讨论】:

  • 你所说的“发到但从不去”到底是什么意思?如果您不向该页面或包含该代码的其他页面发送请求,您的 PHP 代码将永远不会运行。如果您在 PHP 脚本中输出某些内容,它将成为响应的一部分(页面内容,您在浏览器窗口中看到的内容)。如果您将数据发布到 PHP,则该数据将仅针对该请求存在。在那之后,它就消失了。如果您想测试 POST 数据,您可以简单地创建一个带有正确输入的简单 HTML 表单,然后将其发布到您想要查看的页面。
  • 我的意思是我正在向 PHP 页面提交一个表单,该页面获取数据并将其写入数据库。这就是它所做的一切。网址永远不会改变。但是那个 PHP 文件中有 echo 语句,我只是想知道这些语句在哪里打印出来。
  • 任何回声都将成为您的 Ajax 请求响应的一部分。如果您显示您的 Ajax 请求(代码),我们将更容易指出您从何处/如何获得它。基本上,“回声”只是将数据输出到页面,就像它是硬编码的一样(就像你可能拥有的任何 HTML)
  • 为了将来参考,请从一开始就在您的问题中添加所有详细信息。您在您得到的答案下的评论中说您知道正常的表单提交是如何工作的,但是您在问题中没有提到 Ajax(这应该是您问题的主要焦点。)您还应该始终包含相关代码。
  • 我没有写出一个好问题。我已经用代码更新了它,你介意再看一遍吗?谢谢。

标签: javascript php ajax post echo


【解决方案1】:

您已经处理了来自 PHP 的响应(其中包含所有输出,如任何 echo)

在您拥有的以下代码中,url 将包含所有输出。

要查看你得到了什么,只需添加console.log()

$.ajax({ 
    ...
    success: function(url) {
        // Output the response to the console
        console.log(url);

        var image = $('<img class="comment_image">').attr('src', path + url);
        $('#summernote').summernote("insertNode", image[0]);
    },
    ...
}

上述代码的一个问题是,如果上传失败,您的代码将尝试添加字符串“无法上传”作为图像源。最好返回带有更多信息的 JSON。像这样的:

// Set the header to tell the client what kind of data the response contains
header('Content-type: application/json');

if( move_uploaded_file($_FILES['image']['tmp_name'],$uploadfile)) {
    echo json_encode([
        'success' => true,
        'url'     => $uploadfile,
        // add any other params you need
    ]);
} else {
    echo json_encode([
        'success' => false,
        'url'     => null,
        // add any other params you need
    ]);
}

然后在您的 Ajax 成功回调中,您现在可以检查它是否成功:

$.ajax({ 
    ...
    dataType: 'json', // This will make jQuery parse the response properly
    success: function(response) {
        if (response.success === true) {
            var image = $('<img class="comment_image">').attr('src', path + response.url);
            $('#summernote').summernote("insertNode", image[0]);
        } else {
            alert('Ooops. The upload failed');
        }
    },
    ...
}

如果您在 PHP 中的 json_encode() 中向数组添加更多参数,您只需使用:response.theParamName 访问它们。

【讨论】:

  • 感谢您的良好反应,先生
【解决方案2】:

这是一个基本的例子......

HTML(表单)

<form action="script.php" method="POST">
    <input name="foo">
    <input type="submit" value="Submit">
</form>

PHP 脚本 (script.php)

<?php

    if($_POST){
        echo '<pre>';
        print_r($_POST); // See what was 'POST'ed to your script.
        echo '</pre>';
        exit;
    }

    // The rest of your PHP script...

另一个选择(而不是使用 HTML 表单)是使用像 POSTMAN 这样的工具,它可以用于模拟对页面(和 API)的所有类型的请求

【讨论】:

  • 我知道如果窗口将位置更改为新的 php 页面,我可以看到结果,但我使用 ajax 发布到页面而不更改 url。那些回声语句会出现在哪里呢?
  • 如果我一开始就知道你在使用 ajax,我会告诉你在浏览器中打开开发者工具,转到网络选项卡 (A) 并在你的网页上提交 ajax 请求。您应该看到出现在 (A) 中的 ajax 请求。只需单击 ajax 请求并转到响应选项卡,您将成为您返回(或回显)的任何内容
  • 谢谢!对此,我真的非常感激。没有让问题变得更好是我的坏事。
猜你喜欢
  • 2012-09-25
  • 2012-09-23
  • 1970-01-01
  • 2016-07-15
  • 2019-09-17
  • 2015-10-24
  • 2022-06-10
  • 1970-01-01
  • 2012-01-19
相关资源
最近更新 更多