使用 ajax 将 textarea 信息存储到数据库中。除非我以任何方式编辑 textarea,否则工作正常。信息仍然被存储,但 XMLHTTP 永远不会关闭

Posted

技术标签:

【中文标题】使用 ajax 将 textarea 信息存储到数据库中。除非我以任何方式编辑 textarea,否则工作正常。信息仍然被存储,但 XMLHTTP 永远不会关闭【英文标题】:Using ajax to store textarea info into database. Works fine unless I edit textarea in ANY way.. Info still gets stored but XMLHTTP never closes 【发布时间】:2012-05-11 06:40:12 【问题描述】:

基本上,当用户单击保存时,我会调用一个函数,该函数从 textarea 获取内容并将其传递给将其添加到数据库的 php 文件。 我使用了一些 js 函数,一个用于在内容之间切换,另一个用于保存它。 无论如何,如果我只是单击保存而不在 textarea 中编辑任何内容,那么一切正常。但是,如果我以任何方式编辑文本(即使删除一个字母并再次添加它),部分功能将停止工作。负责修改内容的部分。我已经标记了停止工作的部分。

我已经测试过它是否是我传递的内容。它不是。 现在似乎 textarea 本身搞砸了,不会显示新信息。 我通过放置 2 个文本区域对其进行了测试,一个包含要存储和编辑的内容,另一个仅用于显示更改(停止在主文本区域上工作的更改)。

function saveContent() 
    document.getElementById("editing").style.display = 'none';
    document.getElementById("observing").style.display = '';
    document.getElementById("contentArea").readOnly = true;


    if (window.XMLHttpRequest) // code for IE7+, Firefox, Chrome, Opera, Safari
    
        xmlhttp = new XMLHttpRequest();
        alert("first if");
    
    else // code for IE6, IE5
    
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        //alert("second if");
    
    xmlhttp.onreadystatechange = function() 
        //alert(xmlhttp.readyState+" : "+xmlhttp.status);
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
            alert("finished");
            document.getElementById("contentArea").innerhtml = "working"; < ---- * * THIS PART STOPS WORKING IF I MODIFY THE TEXTAREA IN ANY WAY * *
        
    
    //var Content = document.getElementById("contentArea");
    var content = "contenttt";
    //alert(content);
    xmlhttp.open("get", "saveContent.php?q=" + content_id + "&content=" + content, true);
    xmlhttp.send(null);
​

【问题讨论】:

contentArea是什么类型的元素?哪个 ID 是 textarea? 取决于 AndrewR 的问题答案。如果contentArea 是textarea,不应该是.val 而不是lf .innerHTML 【参考方案1】:

如果给出的 cmets 不能解决您的问题,请提出一些建议。

首先,问题可能在于您使用大写 C 的内容变量,或者就在这里。但我知道 chrome 往往会用未定义的变量混淆 ajax 调用。

//var Content = document.getElementById("contentArea");
var content = "contenttt";

其次,在 POST 中发送文本变量。

xmlhttp.Open("POST","saveContent.php?q=" + content_id, false);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send("content=" + content);

最后,考虑使用 JQuery。它如此受欢迎是有原因的。它易于使用,此类问题很少发生,并且适用于所有已知的浏览器。

$.post('saveContent.php', "q": content_id, "content": $('#contentArea').val(), function(data)
    alert(data);
);

【讨论】:

个人问题,alert(data); 会输出什么 saveContent.php 回显? 感谢您提供的信息。我尝试使用 POST 发送变量,以及使用小写变量它没有帮助。最后,我使用“$('#contentArea').val(xmlhttp.responseText);”修复了它修改文本区域,而不是 "document.getElementById("contentArea").innerHTML=xmlhttp.responseText;"仍然不确定为什么会这样,但至少现在可以了。 1) 是警报将输出回声。 2)切换到 JQuery 是一个整体建议,显然必须有一个没有它的解决方案,我认为问题不在于您在 textarea 上使用 innerHTML

以上是关于使用 ajax 将 textarea 信息存储到数据库中。除非我以任何方式编辑 textarea,否则工作正常。信息仍然被存储,但 XMLHTTP 永远不会关闭的主要内容,如果未能解决你的问题,请参考以下文章

通过 Ajax 将 Textarea 字段传递给 php

保持 textarea 与服务器文本文件同步的最佳方法

Aleo区块链如何扩展到数百万用户

Textarea 不接受和 & 同时使用 ajax 和 php 保存页面内容

为啥 Textarea.Innertext 给我空点异常? [复制]

表单中的 Textarea 未使用 jQuery AJAX 通过 POST 提交