【问题标题】:PHP post method apparently not workingPHP post 方法显然不起作用
【发布时间】:2013-08-20 01:49:08
【问题描述】:

最新编辑:事实证明,在 formprocessing.php 中,isset($_POST['submit1']) 为 FALSE(其中 'submit1' 现在是提交按钮的名称;最初它没有名称) .如下面的代码所示,我最初没有对此进行测试。

它确实解释了很多。但剩下的问题是 为什么 isset($_POST['submit1']) 是 FALSE。

注意:这个问题已经过编辑,以反映最近的见解。

作为一个 PHP 初学者,我正在尝试将表单发布到服务器,但它不起作用。很可能我忽略了一些简单的事情,但我只是没有看到它。

我有两个文件:“form.php”和“formprocessing.php”,它们都位于同一个文件夹中。我在下面包含了完整的代码,但首先是一些解释。文件“form.php”包含表单本身,包括“post”方法。文件‘formprocessing.php’可以说是‘post’方法的目的地,即“action = formprocessing.php”。

这个想法是表单处理应该在没有“formprocessing.php”加载或“form.php”重新加载的情况下进行(因此在form.php中是“event.preventDefault();”)。我知道我也可以发布到“form.php”本身,但现在我想使用两个单独的文件。

我几乎从 jQuery 站点中获取了“form.php”的代码(http://api.jquery.com/jQuery.post/,最后一个示例)。我已将 action 属性中的文件名更改为“formprocessing.php”,并添加了必要的 JSON.stringify 命令(见下文)。

“formprocessing.php”中的其余代码只是简单地提取已发布的输入字段的值(表单中只有一个字段),并将其以 JSON 的形式返回给“form.php” -object(然后在 form.php 中进行字符串化)。至少是这样的想法!

在“formprocessing.php”处生成的脚本。 - 在输入字段中输入“xxx”后 - 如下:

<script> {"content":"xxx"} </script>

现在在我看来,这个脚本似乎是正确的——但是是吗?这是我现在想确定的第一件事。

编辑:我现在删除了 formprocessing.php 中的所有 HTML 标记。这也意味着生成的脚本减少为 {"content":"xxx"} ,即只有 JSON 对象。但不会改变结果。

因为以后确实会出错。也就是说,在“form.php”的末尾,我将从“formprocessing.php”返回的数据的内容附加到一个div元素。但实际上附加到 div 的字符串原来是 "{"length":0,"prevObject":{"0":{},"1":{},"2":{},"3" :{},"4":{},"5":{},"6":{},"7":{},"8":{},"length":9},"selector": "#content"}" - 即表示长度为 0 的对象。而不是假设从 'formprocessing.php' 返回的实际数据(正如我所说的,它也等于表单字段的原始输入)。

这里是'form.php'的代码:

<!doctype html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <title>jQuery.post demo</title>
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>

<body>

    <form action="formprocessing.php" id="searchForm">
    <input type="text" name="s" placeholder="Search..." />
    <input type="submit" value="Search" />
    </form>

    <!-- the result of the search will be rendered inside this div -->
    <div id="result"></div>

    <script>

    /* attach a submit handler to the form */
    $("#searchForm").submit(function(event) {

    /* stop form from submitting normally */
    event.preventDefault();

    /* get some values from elements on the page: */
    var $form = $( this ),
    term = $form.find( 'input[name="s"]' ).val(),
    url = $form.attr( 'action' );

    /* Send the data using post */
    var posting = $.post( url, { s: term } );

    /* Put the results in a div */
    posting.done(function( data ) {
    var content = $( data ).find( '#content' );
    contentstring = JSON.stringify(content);
    $( "#result" ).empty().append( contentstring );

    });

    });

    </script>
</body>
</html>

这是“formprocessing.php”的代码:

<!DOCTYPE html>
<html lang="nl">

<head>
    <meta charset="UTF-8" />
    <title>Contact</title>
    <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"></script>
</head>

<body>   

   <script>

   <?php
   echo "alert('Hello!');";
   $invoer = $_POST['s'];
   echo ( json_encode(array("content" => $invoer)) ); 
   ?>

   </script>

</body>
</html>

非常感谢任何帮助。

【问题讨论】:

  • 是的,你是对的......我应该在那里使用 Javascript(在 PHP 开始标记之前)。正如我所说,我几乎是个初学者。
  • 使用 firebug 并查看控制台是否正确执行了您的 ajax。
  • @Sandeep.sarkar:好主意。是的,“formprocessing.php”中的脚本似乎是正确的。也就是说,如果我在输入框中输入“xxx”,生成的脚本是:。这似乎是正确的(我已经删除了警报)。另一方面,内容似乎没有返回到 form.php,即内容没有附加到 div 元素。我将进一步试验 Firebug。
  • 请不要用IE控制台,帮个忙,下载Firebug for Firefox,真的好用
  • 我不明白为什么需要在 formprocessing.php 中加载 jquery 和 html 标签,据我所知,这是不必要的。在 post done 函数上执行 console.log(data) 以查看您从 formprocessing.php 中得到了什么。

标签: php ajax post


【解决方案1】:

您的 formprocessing.php 文件只需要:

<?php
   $invoer = isset($_POST['s']) ? $_POST['s'] : 'not set';
   echo '$invoer is:'.$invoer; 
?>

【讨论】:

    【解决方案2】:

    尝试此操作时,#result 对我来说会填充以下数据:

    {"length":0,"prevObject":{"0":{},"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"length":9},"selector":"#content"}

    可能不完全符合您的要求。除此之外,事件被触发了,但是你犯了一些致命的错误:

    1. 有一个 ID 为 #content 的元素是 formprocessing.php 创建的。
    2. alert() 永远不会使用 ajax 执行。使用 ajax,您只是静态加载数据。脚本元素在那里,但它不应该被实际执行
    3. 您可能只想从 formprocessing.php 发出真正的 json。为此,请删除所有 html,确保发出 application/json 内容类型并且返回 json。

    【讨论】:

    • 您能否详细说明您的观点 3。摆脱 HTML 只剩下这个: $invoer)) ); ?> 哪个 jQuery 不接受。另外,我不确定如何“发出应用程序/json 内容类型并且只返回 json”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 2018-01-15
    • 2018-08-23
    相关资源
    最近更新 更多