需要ajax概念项目的想法



我已经用ajax创建了一个聊天,但我仍然有一些无法识别的问题。当加载页面时,php加载所有打开的聊天和相对mex,然后有一个addmex-ajax函数:当用户点击enter时,它被称为传递this.value和cod_chat。ajax函数将这些数据发送到php,php将它们插入数据库并将最后一个mex添加到聊天中。每隔X秒就会调用一个更新功能来更新聊天。它一直工作到addmex函数:php工作,因为它将mex添加到数据库中,但出于某种原因,它刷新了页面。我可以使用RTMP吗?

这是表单的代码:

<input type='text' class='chat_input' value='write something' onkeydown='if (event.keyCode == 13){addmex(this.value); this.value='';}'/>

这是ajax函数的代码(不要担心php变量,因为这个函数是由echo加载的):

function addmex(mex)
{
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.open("GET","addmex.php?cod_contatto="+' . $cod_contatto . '+"&mex="+mex,false);
xmlhttp.send();
document.getElementById("messaggi_' . $cod_contatto . '").innerHTML+=xmlhttp.responseText;
}

我将Async设置为false,因为它的响应速度很慢,如果我将其设置为true,则只能处理一些让服务器部分完成的警报。知道吗?

我用mysql制作了一个迷你项目脚本,它非常完美!您不需要HTTPS来隐藏ajax文件。试试这个。这100%有效


MYSQL代码:


SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS `ajax_sessions`;
CREATE TABLE `ajax_sessions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sid` text NOT NULL,
  `sip` varchar(18) NOT NULL,
  `open` int(1) NOT NULL,
  PRIMARY KEY (`id`)
)
ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;


创建名为security.php的文件,并将其像index.php一样包含在主页中插入并保存此代码


    // INCLUDE YOUR MYSQL CONNECT FILE
    require '/engine/config/mysql.php';
    // SESSION IP ADDRESS
    $sip = $_SERVER['REMOTE_ADDR'];
    // COUNT IF TABLE FOR THIS IP ADDRESS EXISTS
    $count = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM ajax_sessions WHERE sip = '".$sip."'"));
    // COUNT VAR
    $count = $count['COUNT(*)'];
    // GENERATE RANDOM SESSION ID
    $sid = substr(str_shuffle("_-0123456789-_-abcdefghijklmnopqrstuvwxyz-_-ABCDEFGHIJKLMNOPQRSTUVWXYZ-_"), 0, 50);
    // YOUR AJAX / XMLHTTP / (LOAD) CALL
    echo '
    <script>
    $("button").click(function() {
    $(".container").load("/ajax/request.php?sid='.$sid.'");
    });
    // CHEC IF CODE WORKS
    console.log("Ajax - Session control is activated.");
    </script>';
    // IF TABLE FOR THIS IP ADDRESS NOT EXISTS INSERT IP,SESSION AND OPEN SESSION.
    if($count<1) {mysql_query("INSERT INTO ajax_sessions (sid,sip,open) VALUES ('".$sid."','".$sip."','1')");
} else {
    // IF THIS IP ALREADY EXISTS INTO TABLE JUST UPDATE IT AND INSERT SESSION ID.
    mysql_query("UPDATE ajax_sessions SET sid = '".$sid."', sip = '".$sip."', open = '1'");
}


将此PHP代码放入AJAX文件


// IF GET sid ( SESSION ID )
if($_GET) {
// CHECK IF SESSION ID IS SET
if(isset($_GET['sid']) && $_GET['sid'] == $_GET['sid'] && !empty($_GET['sid'])) { 
// SESSION REMOTE IP ADDRESS
$sip = $_SERVER['REMOTE_ADDR']; 
// GET SESSION ID WE GOT
$sid = $_GET['sid']; 
// COUNT IF THIS SESSION EXISTS IN MYSQL BASE
$fetch = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM ajax_sessions WHERE sid = '".$sid."' AND sip = '".$sip."' AND open = '1'"));
// COUNT SESSION
if($fetch['COUNT(*)'] == 1) {
// IF SESSION EXISTS CATCH IP ADDRESS AND CLEAR SESSION ID FOR THIS IP AND CLOSE IT, BUT NOT REMOVE
mysql_query("UPDATE ajax_sessions SET sid = NULL, sip = '".$sip."', open = '0'");
} else {
// DIE IF SESSION NOT EXISTS AND DO NOT SHOW CODE
die;
}
// IF IT WORKS OPEN JS CONSOLE LOG WITH F12 FOR GOOGLE CHROME 
echo '<script>console.log("Session unseted !")</script>';
}
// AJAX POST CONTENT. IF POST
} else if($_POST) {
echo 'Call request';
}


我知道这很难理解,但它确实有效,我正在使用它。

插入字段是如何实现的?如果它是一个HTML表单,当你点击回车键时,它会发送表单。因此,如果给定此选项,则需要阻止默认的输入操作以阻止页面刷新:只需获取js事件(onkeydown),执行需要执行的操作,就会返回false

编辑

您可以以不同的方式分配处理程序:给输入一个ID,这样就可以工作了:

document.getElementById(yourID).onkeydown = function(event) {
  if(event.keyCode == 13){addmex(this.value); this.value='';}
  return false;
}

编辑2

您的第一个代码有语法错误,应该是:

.... this.value="";}'/></form>

不能在内部字符串中使用相同的引号:"类似于两个字符串,而"是另一个字符串中的一个字符串。

解决方案对于那些碰巧读到这篇文章的人

表单标记是不必要的,并导致页面刷新(有时阻止默认值不起作用?!)。

最后,缺少了通过ajax进行刷新的功能。只需使用该函数执行setInterval(),它就会正常工作。

也许您可以尝试ArcusNodeCumulus。我建议ArcusNode继续。这是一个OpenRTMFP协议。

最新更新