خطأ فائض المكدس عند استخدام JQuery / ASP.NET للحصول على دردشة AJAX بسيطة

StackOverflow https://stackoverflow.com/questions/726580

سؤال

أحاول إنشاء دردشة AJAX بسيطة باستخدام JQuery و ASP.NET. التعليمات البرمجية الخاصة بي يعمل مثل هذا:

  1. عندما تقوم الصفحة بتحميلها قم بتحديث DIV "ChatBox" مع طلب إلى صفحة الرسائل .ASPX، والتي تتعامل مع الحصول على رسائل جديدة من قاعدة البيانات وينكل تحديث تلقائي باستخدام Settimeout ().
  2. كلما نقر المستخدم على زر الإرسال، يضيف الرسالة إلى قاعدة البيانات داخل رمز الرسائل .ASPX Page_load.

أحصل على خطأ تجاوز كومة من البداية عندما يبدأ المهلة، وأنا لست متأكدا مما سيؤدي إلى ذلك؟ هل يمكن أن يكون التخزين المؤقت؟ ربما لا يمكن أن يكمل التعليمات البرمجية في الرسائل .ASPX قيد التشغيل ضمن تلك ال 5 ثوان؟ سيكون موضع تقدير أي مساعدة!

أيضا، لم تقلق بشأن هجمات حقن SQL بعد B / C كنت أحاول فقط الحصول عليها مع رمز بسيط.

إليك الرمز الخاص بي:

جانب العميل:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
        <script src="jquery.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                refreshChat();
                $("#btnSend").click(function() {
                    addMessage();               
                });
                return false;
            });

            function refreshChat()
            {
                $.get("messages.aspx", function(data) {  
                    $("#chatbox").empty();
                    $("#chatbox").prepend(data);
                });
                setTimeout(refreshChat(), 5000);
            }

            function addMessage()
            {
                $.get("messages.aspx", {usr: $("#usr").val(), msg: $("#msg").val()} );
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">

            <div id="input">
                username: <input type="text" name="usr" id="usr" /><br />
                message:<br />
                <textarea id="msg" name="msg" rows="5" cols="30"></textarea><br /><br />
                <input type="button" id="btnSend" name="btnSend" value="Send" />
            </div>

            <div id="chatbox"></div>

        </form>
    </body>
    </html>

جانب الخادم:

using System;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.IO;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class messages : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {     
        SqlConnection conn = 
            new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=F:\\Chatter\\App_Data\\messages.mdf;Integrated Security=True;User Instance=True");
        conn.Open();

        string sql;
        SqlCommand comm;

        if (Request["usr"] != null)
        {
            string user = Request["usr"].ToString();
            string message = Request["msg"].ToString();
            sql = "insert into messages (usr, msg, [date]) values ('"
                + user + "', '" + message + "', '" + DateTime.Now + "')";
            comm = new SqlCommand(sql, conn);
            comm.ExecuteNonQuery();
        }

        sql = "select top 5 usr, msg from messages order by [date] desc";
        comm = new SqlCommand(sql, conn);
        SqlDataReader dr = comm.ExecuteReader();

        while (dr.Read())
        {
            Response.Write(dr["usr"].ToString() + ": <br/>" + dr["msg"] + "<br/><br/>");
        }
        dr.Close();

        conn.Close();
    }
}
هل كانت مفيدة؟

المحلول

تعمل وظيفة JavaScript RefreshChat بشكل متكرر نفسها. تغيير الكود إلى:

        function refreshChat()
        {
            $.get("messages.aspx", function(data) {  
                $("#chatbox").empty();
                $("#chatbox").prepend(data);
            });
            setTimeout(refreshChat, 5000);
        }

نصائح أخرى

تحتاج إلى التفاف استدعاء الوظيفة في petimeout الخاص بك في علامات الاقتباس، وإلا فإنه يتم تقييمه على الفور، مما تسبب في ترميمة لانهائية وسعة مكدس:

setTimeout("refreshChat()", 5000);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top