最新编辑:事实证明,在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>
任何帮助都非常感激。
答案 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"}
可能不完全是您正在寻找的东西。除此之外,事件被触发,但你犯了一些致命的错误:
application/json
内容类型,仅返回json。