Javascript 我应该将PHP与ajax结合起来将数据发布到服务器吗?
假设页面在提交评论表单后总是刷新。这很烦人,因为评论不在页面的顶部,你总是要滚动到底部才能看到你的评论和其他评论 我认为使用ajax提交表单会更好 HTMLJavascript 我应该将PHP与ajax结合起来将数据发布到服务器吗?,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,假设页面在提交评论表单后总是刷新。这很烦人,因为评论不在页面的顶部,你总是要滚动到底部才能看到你的评论和其他评论 我认为使用ajax提交表单会更好 HTML <form id="com-form" method="post"> <textarea type="text" name="text" required=""></textarea> <input type="submit" value="Post"/> </form&
<form id="com-form" method="post">
<textarea type="text" name="text" required=""></textarea>
<input type="submit" value="Post"/>
</form>
<div id="com-refresh"></div>
PHP
<?php
session_start();
require_once 'comment.class.php'; //require a class with methods
$text = $_POST['text'];
if($_SESSION['status'] == 'loggedin') {
if(isset($text)) {
$comment = new Comment(); //initialize the Comment object
echo $comment->add_comment($text); //safe the comment in the database and output it
} else echo "Your comment is empty.";
} else echo "Please log in to post comments.";
只需在使用标题('location:comments/build.php')完成过程后,将文件从add.php
重定向到build.php
代码>或其他一些,因此第二个ajax调用是不必要的。您可以简单地执行以下操作:
$(document).ajaxSuccess(function(e, xhr, settings) {
$(".mydiv").html(xhr.responseText);
});
让您的php文件打印您想要替换的html
进一步阅读:
您的解决方案示例
表格文件:
<form method="post">
<textarea type="text" name="comment" id="com-area"></textarea>
<input type="submit" id="com-submit"/>
</form>
<div id="com-refresh">
<?php require_once "comments/build.php"; ?>
</div>
$(function() {
$(".cmtx_form").submit(function(e) {
e.preventDefault();
var form = $(this);
var text = $(".cmtx_textarea_field").val();
$.ajax({
type: 'POST',
url: 'comments/add.php?ajaxCall=true',
cache: false,
data: { comment: text }
});
});
});
$(document).ajaxSuccess(function(e, xhr, settings) {
$("#com-refresh").html(xhr.responseText);
});
问题在于php代码。我已经用OOP风格重写了生成注释的函数,这很有帮助。我编辑了《知道》这篇文章,以便将来有用
简而言之:
- 使用ajax!你的网站的用户体验会更好,因为你可以提供实时更新等
- 建议使用内置jQuery函数将数据安全地转换为“标准URL编码表示法中的文本字符串”,这样可以使您的工作更加简单
- 我知道有很多关于OOP的讨论,但它确实有助于更轻松地理解、组织和维护代码
只需在使用header('location:comments/build.php')完成过程后,将文件从add.php文件重定向到build.php即可;或者其他一些,所以第二个ajax调用是不必要的。好吧,我忽略了第二个ajax,并将其重定向到add.php中的build.php,在我的浏览器控制台中,我得到:add.php 302被临时移动,build.php 403被禁止。add.php和build.php文件都位于相同的位置还是不同的位置?并在add.phpno中发布标题代码,实际上它们位于不同的位置。下面是标题的答案:缓存控制无存储,无缓存,必须重新验证,后检查=0,前检查=0连接保持活动内容长度0内容类型文本/html日期2014年4月30日星期三10:55:20 GMT过期,1981年11月19日星期四08:52:00 GMT保持活动超时=4,max=500 Location/php/comments/includes/build.php Pragma no cache Server Apache/2.4how about代替serialize()尝试使用var text=$(“textarea#com area”).val()
和数据:{post_data:text},
?好的,我去掉了第二个ajax,重定向到add.php中的build.php,在我的浏览器控制台中,我得到:add.php 302临时移动,build.php 403被禁止。我得到build.php 408请求超时OK我现在已经添加了add.php fie的内容并更新了jquerywhere是您的ajaxSuccess函数?但是忘记第一个ajax,首先,我只想在表单提交后重新包含build.php文件,以便再次生成注释部分,现在是否成功添加注释无关紧要。请尝试使用require而不是require\u一次
<form method="post">
<textarea type="text" name="comment" id="com-area"></textarea>
<input type="submit" id="com-submit"/>
</form>
<div id="com-refresh">
<?php require_once "comments/build.php"; ?>
</div>
$(function() {
$(".cmtx_form").submit(function(e) {
e.preventDefault();
var form = $(this);
var text = $(".cmtx_textarea_field").val();
$.ajax({
type: 'POST',
url: 'comments/add.php?ajaxCall=true',
cache: false,
data: { comment: text }
});
});
});
$(document).ajaxSuccess(function(e, xhr, settings) {
$("#com-refresh").html(xhr.responseText);
});
// ... code code code...
if (isset($_GET['ajaxCall']) && $_GET['ajaxCall']) {
include_once('/path/to/build.php');
}