.replace无法处理xmlhttp.responseText - Javascript

时间:2011-12-05 18:26:10

标签: javascript ajax

我有:

 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请求发生的位置完全相同......

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

在'if'语句中首先测试add alert('x');

第二次测试:延迟'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);

 }
}

答案 2 :(得分:0)

如果您修复了可能是复制和粘贴错误的问题,则代码可以正常工作。您正在设置.html(current_response),但永远不会定义current_response

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

但我怀疑它是否按你想要的方式工作。如果$("#box1").val()worldxmlhttp.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/