2009-08-06 31 views
3

参数工作RETURN_VALUE包含的Javascript正则表达式中不IE

<textarea>{"id":43,"description":"","item_id":28,"callback":"addNewAttachment","filename":"foo.jpg",,"type":"posts","ext":"jpg","size":145}</textarea> 

下一个代码移除textarea的在Firefox,铬标签,所以含量可以在改编被访问[1]。在IE警报(“失败”)被调用。

function addAttachment(returned_value) { 
    var re = new RegExp ("<textarea>(.+)</textarea>");  
    var arr = re.exec(returned_value); 
    if(arr != null && arr.length > 1) { 
     var json = eval('(' + arr[1] +')'); 
    } else { 
     alert("Failure");   
    } 
    window[json.callback](json); 
} 

returned_value来自Ajax调用。我使用JQuery。

TEST

这不起作用或者:

var re = new RegExp (/<textarea>(.+)<\/textarea>/); 

SOLUTION

的问题是,IE是越来越而Firefox是越来越它小写大写textarea的字符串。

下一个正则表达式解决了这个问题。

var re = new RegExp ('<textarea>(.+)</textarea)>','i'); 
+0

没有ü尝试 '变种重新=新的正则表达式(/ /);' – palindrom 2009-08-06 08:30:46

+0

你说* Variable * * return_value * *包含*,但在代码中有're.exec(returned_value);'。这是问题文本或代码中的拼写错误吗? – Helen 2009-08-06 08:33:26

+0

@palindrom:如果你使用/.../它已经是RegExp对象,你不应该从它创建一个新的RegExp对象... – Guffa 2009-08-06 08:36:03

回答

0

你用什么IE版本?我测试了下面的代码在IE 7和它的工作:

<script> 
var x = '<textarea>{"id":43,"description":"","item_id":28,"callback":"addNewAttachment","filename":"foo.jpg",,"type":"posts","ext":"jpg","size":145}</textarea>' 

var r = new RegExp('<textarea>(.+)</textarea>'); 
var a = r.exec(x); 
for (var i=1; i<a.length; i++) 
    alert(a[i]); 
</script> 

编辑:我查过这个代码在IE7和它也适用。 test.xml是一个文件,其中包含该字符串,并位于包含脚本的HTML页面旁边的文件夹中。我认为它也应该与返回相同内容的动态页面一起工作。

<script> 
function test(x) { 
    var r = new RegExp("<textarea>(.+)</textarea>"); 
    var a = r.exec(x); 
    for (var i=1; i<a.length; i++) 
     alert(a[i]); 
} 

var rq = new XMLHttpRequest(); 
rq.open("GET", "test.xml", false); 
rq.send(null); 
test(rq.responseText) 
</script> 
+0

你是对的,当returned_value在字符串中时,代码工作。但我得到的服务器在ajax调用返回的值,似乎有问题。任何想法? – 2009-08-06 08:39:14

+0

你使用什么样的Ajax框架?你的电话如何? – rslite 2009-08-06 08:41:44

+0

我更新了问题。我使用JQuery – 2009-08-06 09:35:18

4

这是一个区分大小写的问题吗? new RegExp(..., "i")可能有帮助吗?

+0

顺便说一句。刚刚注意到JSON对象包含两个commans:“,,” - 我认为IE会在eval()中的barf上,一旦你达到那么远。 – searlea 2009-08-06 09:45:01

4

尝试使用字面正则表达式:

var r = /<textarea>(.+)<\/textarea>/i;