【问题标题】:.replace not working on xmlhttp.responseText - Javascript.replace 不适用于 xmlhttp.responseText - Javascript
【发布时间】:2011-12-06 03:32:51
【问题描述】:

我有:

 if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {

    cu=$("#box1").val();
    cur=xmlhttp.responseText;

    cur=cur.replace(cu,'<strong>'+cur+'</strong>');  

     $(".box2").html(cur);

 }

我尝试过,但替换并没有发生。

当我将 cur 更改为仅具有普通文本 (cur='my name is....';) 的值时,它可以正常工作。

我尝试将替换行更改为:cur=cur.replace(cu,'found it'); - 仍然没有

这与发生 AJAX 请求的功能相同...

有什么想法吗?

【问题讨论】:

  • 你在responseText中有值吗,它不为空吗..尝试提醒responseText检查..?
  • 它不是空的,因为我在不同的 div 中显示了这个值并且它显示出来了..

标签: javascript ajax


【解决方案1】:

如果您解决了一个可能是复制和粘贴错误的问题,您的代码就可以工作。您正在设置.html(current_response),但从未定义过current_response

http://jsfiddle.net/4LXWd/1/

但我怀疑它是否按您希望的方式工作。如果$("#box1").val()world 并且xmlhttp.responseTexthello world hello world,那么您的结果将仅替换世界的第一个实例,并将其替换为整个响应字符串,因此您将得到:

hello <strong>hello world hello world</strong> hello world

这就是你想要的吗?如果只替换匹配字符串的第一个实例就可以了,您可能想要这样:

cur = cur.replace(cu, "<strong>$&</strong>");

编辑:但要替换匹配字符串的每个实例,您需要使用正则表达式:

cu = $("#box1").val();
var re = new RegExp(cu.replace(/[\[\]\\.*+?^${}()\/|]/g, "\\$&"), "g");
cur = xmlhttp.responseText;
cur = cur.replace(re, '<strong>$&</strong>');
$(".box2").html(cur);

工作演示: http://jsfiddle.net/4LXWd/2/

【讨论】:

  • 啊,你刚刚指出了问题中的一个编辑错误,对不起,我修复了。它应该是 .html(cur)。基本上,我想替换(加粗)cu 中也在 cur 中的任何字符。我需要替换 cu 中的每个字符,而不仅仅是第一个。
  • @Nav - 要替换​​每个匹配的字符,您必须使用正则表达式。请参阅我的答案和this jsfiddle 的编辑。
  • 啊,成功了。还有一件事:你知道有什么方法可以在responceText(cur)中转义一些html内容,因为我在那里有一些div标签(cur=responceText=
    实际值
    )我没有不希望替换生效。这可能吗?
  • @Nav - 我之前至少回答过两次这个问题。见stackoverflow.com/a/7720056/361684stackoverflow.com/a/7380697/361684
【解决方案2】:

听起来cu 在字符串cur 中根本找不到。将其更改为您知道其中的字符串文字,以确保您实际替换某些内容。

【讨论】:

  • 我也试过了。依然没有。我知道问题在于 cur 是 xmlhttp.responseText 因为当我将 cur 更改为普通字符串(cur='hello there';)时,它工作正常。由于某种原因,它无法替换 xmlhttp.responseText 中的内容
【解决方案3】:

Javascript 是异步的。您是否确认正在执行“if”语句?这些条件在首次测试时很有可能没有得到满足。

第一个测试:add alert('x'); 在那个 'if' 语句中。

第二个测试:延迟那个'if'语句

setTimeout('fncCallBack()', 5000);

function fncCallBack() {
if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {

    cu=$("#box1").val();
    cur=xmlhttp.responseText;

    cur=cur.replace(cu,'<strong>'+cur+'</strong>');  

     $(".box2").html(current_response);

 }
}

【讨论】:

  • if 条件得到满足,因为我改变了行:$(".box2").html(current_response);到 $(".box2").html(cur); whicl 将在 div box2 中显示最终的(替换字符的字符串)。它确实如此。所以它不是 if 语句
  • 试过延迟,还是不行。
  • 我忘记了 setTimeout 调用的 ()。已更新。
猜你喜欢
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
  • 2012-01-11
  • 2016-10-02
  • 2020-05-16
相关资源
最近更新 更多