gpt4 book ai didi

php - 提交表单后仅通过 PHP 刷新 1 DIV

转载 作者:行者123 更新时间:2023-12-02 20:09:50 25 4
gpt4 key购买 nike

我的页面上有一个评论板,我根据用户所在的页面,使用changeTopic() 函数中的XMLHttpRequest 加载不同的主题。我最初在提交表单 php 的末尾有这个:

header('Location: http://' . $_SERVER['HTTP_HOST'] . $_POST['page']);

问题是我不想刷新整个页面,只想刷新包含消息的 DIV。我尝试通过将其插入带有 echo 的脚本标签内来运行 changeTopic() 函数。其一,我无法获取 .$_GET['topic']。在 echo 内部工作,即使我首先创建了它的变量,但我也尝试通过硬插入可能的值之一来运行该函数,结果如下:

1) 虽然消息部分刷新正确,但我丢失了表单,因为它包含在 index.html 中,而我只使用查询字符串从外部 gettopic.php 加载消息。

2) 我得到了一个奇怪的结果,我丢失了一个完全加载到完全不同的 div 中的外部文件。该文件更改了主页的哈希值,每次刷新时都会检查该哈希值,并根据哈希值加载正确的文件,因此使用整个页面刷新永远不会导致这种情况。

//编辑

function changeTopic(topic) {
if (topic=="") {
document.getElementById("messagelist").innerHTML="";
return;
}
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
}
else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("messagelist").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST", "gettopic.php?t="+topic,true);
xmlhttp.send();
}

我页面上的主要应用程序是我用 RaphaelJS 完成的 SVG map 。用户可以将信息页面从此 SVG map 加载到另一个 div“info”中。这些页面加载了类似的功能,此外还更改了#hash并运行changeTopic()来更改留言板,以便人们可以就每个主题进行对话。

PHP 表单采用正常填写的信息以及由用户正在浏览的当前页面设置的隐藏“pageid”,并将其发送到数据库。不同的消息按此 pageid 排序,因此 changeTopic() 函数只会带来正确的消息:gettopic.php?t=topic ('pageid')。

提交表单后,我只想刷新消息部分并清除表单。目前,要么是整个页面刷新(用户失去了他们在 SVG map 上的位置),要么是部分刷新,我失去了表单(而是得到了一个空白点),并且奇怪的信息页面丢失了。

最佳答案

你可以这样做:

var ajaxfoo = function(obj) {
var xmlHttp = null;
try {
xmlHttp = new XMLHttpRequest();
}catch(e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e) {
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e) {
xmlHttp = null;
}
}
}if (xmlHttp) {
obj.method = obj.method.toUpperCase();
xmlHttp.open(obj.method, obj.url, true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
if(obj.method == 'POST') {
if(typeof(obj.params) != 'undefined') {
xmlHttp.setRequestHeader("Content-length", obj.params.length);
}
}
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
var json = eval(xmlHttp.responseText);
if(json.success) {
if(typeof(obj.success) == 'function'){obj.success(xmlHttp.responseText);}
}
else {
if(typeof(obj.failure) == 'function') {obj.failure(xmlHttp.responseText);}
}
}
};
if(obj.method == 'POST' && typeof(obj.params) != 'undefined') {
xmlHttp.send(obj.params);
}
else {
xmlHttp.send(null);
}
}
};

function callfoo(topicname) {
ajaxfoo({
method: 'GET',
url: 'gettopic.php?t='+topicname,
success: function(response) {
var json = eval(response);
alert('success callback function! '+json.data);
},
failure: function(response) {
var json = eval(response);
alert('failure callback function! '+json.data);
}
});
}

并在

success: function(response) {
var json = eval(response);
alert('success callback function! '+json.data);
},

你可以添加你的innerHTML内容:)

gettopic.php

然后应该回显如下内容:

{success: true, data: [{id: 1, "title": "test title", "description": "moo"},{id: 2, "title": "test title", "description": "moo"},{id: 3, "title": "test title", "description": "moo"}]}

您可以通过调用来访问它

json.data[0].title
json.data[1].title
json.data[2].title
json.data[0].description
...

所以你可以通过执行类似的操作来简单地构建你的innerHTML内容

doc....innerHTML = '<h2>'+json.data[0].title+'</h2>';

关于php - 提交表单后仅通过 PHP 刷新 1 DIV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7074961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com