1

我正在尝试在 jQuery 的帮助下与服务器来回通信。

这是我的简单场景:

  1. 使用 jQuery post 方法通过 html 表单发送数据。
  2. 在服务器端接收数据再次回显。
  3. 在客户端以jQuery回调的形式接收相同的数据并对数据做一些事情(broser中的console.log)

现在我的问题是php返回带有标签的源html代码,而不是已经收到的数据?因此,如果我在客户端的表单字段中键入“Hello”,php 将从页面返回整个 html 源。这是为什么 ?

html:

<form action="#">
     <textarea name="content" id="content" rows="8" cols="40"></textarea>
        <p><button>Click to submit</button></p>
    </form>

jQuery:

    (function(){
            $("form").on("submit",function(e){
                $.post("save.php",$(this).serialize(),function(data){
                    alert(data);
                })
            e.preventDefault();
            })
    }());

PHP:

<!DOCTYPE HTML>
<html charset="utf-8">
    <head>
        <title>Index</title>
        <link rel="stylesheet" href="path-to-stylesheet.css" type="text/css"/>
    </head>
    <body>
        <?php
            echo $_POST['content'];
        ?> 
    <script src=""></script>
    </body>
</html>
4

2 回答 2

3

假设这是您的 save.php :

<!DOCTYPE HTML>
<html charset="utf-8">
    <head>
        <title>Index</title>
        <link rel="stylesheet" href="path-to-stylesheet.css" type="text/css"/>
    </head>
    <body>
        <?php
            echo $_POST['content'];
        ?> 
    <script src=""></script>
    </body>
</html>

只需执行 json_encode 并使用您的 ajax 调用解析 jSON:

保存.php

<?php
    echo json_encode($_POST['content']);
?> 

jQuery

$.post("save.php",
    $(this).serialize(),
    function(data){
        alert(data);
    }, 'json');
于 2013-02-09T12:15:58.110 回答
2

您正在将完整的 html 页面发送回浏览器,这就是为什么您不只收到数据的原因。将您的 php 文件更改为以下内容,它应该可以按预期工作:

<?php
echo $_POST['content'];
?>

在您的情况下,为什么 PHP 会返回整个 html 页面?

  1. PHP 解析整个 save.php 文件
  2. 如果没有<?php ?>标签,则整个内容保持不变,并将按原样发送到浏览器
  3. 如果它找到任何<?php ?>标签,解析器会解释代码并将其输出到同一个地方

例子

保存.php

<!DOCTYPE HTML>
<html charset="utf-8">
    <head>
        <title>Index</title>
        <link rel="stylesheet" href="path-to-stylesheet.css" type="text/css"/>
    </head>
    <body>
        <?php
            echo $_POST['content'];
        ?> 
    <script src=""></script>
    </body>
</html>

解析器找到一个<?php ?>标签:

        <?php
            echo $_POST['content'];
        ?> 

并解释它:(简单地假设$_POST['content'] == 'john smith'

        john smith

现在,解释的代码被插入并替换原始内容中的 php 标签:

<!DOCTYPE HTML>
<html charset="utf-8">
    <head>
        <title>Index</title>
        <link rel="stylesheet" href="path-to-stylesheet.css" type="text/css"/>
    </head>
    <body>
        john smith
    <script src=""></script>
    </body>
</html>

最后,它被发送到浏览器并由 jQuery Ajax 回调处理。

于 2013-02-09T12:13:58.953 回答