PHP post方法显然不起作用

时间:2013-08-20 01:49:08

标签: php ajax post

最新编辑:事实证明,在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应该在没有'formprocessing.php'loading或'form.php'重新加载的情况下进行(因此在form.php中为“event.preventDefault();”)。我知道我也可以发布到'form.php'本身,但是现在我想要使用两个单独的文件。

我从jQuery-site获取了'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>

现在我的眼睛,这个脚本SEEMS正确 - 但是它?这是我现在肯定想知道的第一件事。

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

因为以后会出现问题。也就是说,在'form.php'的末尾,我将从'formprocessing.php'返回的数据的内容附加到div元素。但实际上附加到div的字符串结果为“{”length“:0,”prevObject“:{”0“:{},”1“:{},”2“:{},”3“ :{} “4”:{}, “5”:{}, “6”:{}, “7”:{}, “8”:{}, “长度”:9}, “选择器”: “#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>

任何帮助都非常感激。

2 个答案:

答案 0 :(得分:0)

您的formprocessing.php文件只需要:

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

答案 1 :(得分:0)

尝试此操作时,#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。