0

最新编辑:事实证明,在 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 站点(http://api.jquery.com/jQuery.post/ ,最后一个示例)中获取了“form.php”的代码。我已将 action 属性中的文件名更改为“formprocessing.php”,并添加了必要的 JSON.stringify 命令(见下文)。

“formprocessing.php”中的其余代码只是简单地提取发布的输入字段的值(表单中只有一个字段),并将其以 JSON 对象的形式返回给“form.php”(然后在 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>

非常感谢任何帮助。

4

2 回答 2

0

您的 formprocessing.php 文件只需要:

<?php
   $invoer = isset($_POST['s']) ? $_POST['s'] : 'not set';
   echo '$invoer is:'.$invoer; 
?>
于 2013-08-20T02:12:33.960 回答
0

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

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

可能不完全是您正在寻找的东西。除此之外,事件被触发,但你犯了一些致命的错误:

  1. formprocessing.php 创建的元素具有 ID #content。
  2. alert() 永远不会使用 ajax 执行。使用 ajax,您只是静态加载数据。脚本元素在那里,但它不应该被实际执行
  3. 您可能只想从 formprocessing.php 发出真正的 json。要做到这一点,去掉所有的 html,确保你发出一个application/json内容类型并且返回 json。
于 2013-08-20T02:13:50.090 回答