ajax传值在ie下可以得到 ,在Chrome和FireFox下得不到值。

问题描述:我用ajax将数据库中得到的值传到jsp页面,利用IE可以得到值,但是利用Chrome得到的值是Unfefined .开始我以为是缓存问题,但是我对缓存做了相关设置,仍然不能解决。
一、js里面的部分代码如下 :
1.获得xmlrequest

[color=orange] var xmlrequest;
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlrequest = new ActiveXObject("Microsoft.XMLHTTP");
} else {
xmlrequest = new XMLHttpRequest();
}
}[/color][color=blue][/color]

2.转到jsp页面的代码如下
[color=blue]function setProUniv(o) {
createXMLHttpRequest();
if (xmlrequest) {

//准备发送请求
var req = "/SSH05/changeUni?proId=" +o.proId + "&coId=" +o.coId+"&surl="+Math.random();
window.alert(req);
//打开请求
xmlrequest.open("get", req, true);
xmlrequest.send(req);
}
}[/color]
二、jsp页面部分代码如下
[color=blue]<!-- 显示省份 -->



proId="${province.id}" coId="${province.country.id }">

${province.name}

/c:forEach
[/color]
这里的${province.id}在jsp页面可以正确显示,但是把它当作参数传时
显示为undefined.
三、action里面部分代码如下。
[color=blue] HttpServletResponse response = ServletActionContext.getResponse();
HttpServletRequest request=ServletActionContext.getRequest();
response.setContentType("text/xml;charset=utf-8");
response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
String proId=request.getParameter("proId");
String coId=request.getParameter("coId");
System.out.println("proId"+proId);
System.out.println("coId"+coId);[/color]
在IE下运行时控制台可以将这两个参数打印出来,但是在Chrome下面运行时控制台没有把这两个参数打印出来。

程序运行之后 IE下面显示了得到了数据因为 window.alert(req); 会弹出一个提示框。
/SSH05/changeUni?proId=4&coId=1&surl=0.3469222103628817
而Chrome下面显示为
/SSH05/changeUni?proId=undefined&coId=undefined&surl=0.3105704408647314

本来我以为是Chrome得不到数据,但是我在后面加了另外一个随机的参数
&surl="+Math.random() 在Chrome 下面虽然前面两个参数都得不到,但是后面的那个随机生成的数每次都在变化,这是为什么呢?不是应该都为undefined才算是合理吗?当然我的本意当然是希望在Chrome下面也能成功得到参数。
不知道问题描述清楚没有?谁帮我解答一下吧,谢谢!

在在Chrome和FireFox下它将自定义属性放在了attributes的数组里面,必须通过如下方式获取属性的自定义属性的值:
o.attributes['proId'].value;
而在ie下:
利用你说的方式可以很方便的访问

我查看了一下调用栈,其实他们都把自定义变量放在了一个attributes的数组里面如果想兼容又自己写的话,可以利用如下方式:
o.attributes['proId'].value;获取值
在firefox中,属性值大小写不敏感,ie中大小写敏感。

     我觉得也就是浏览器访问自定义属性的方式不一样导致了你的问题!

这个是因为浏览器之间的差异。

如果你只有两个参数的话,最简单实现就直接传参数,不需要把作为一个属性来赋值。

另外:如果实现在要用属性来实现的话,可以用jquery来做(自己写实现的话,太麻烦)
通过:ID来查找,$('#a1').attr('proId')

[code="java"]
function setProUniv(o) {

// 这样就可以了,不用写ID了。(jsp代码也不用改了)
var proId = $(o).attr('proId');

createXMLHttpRequest();
if (xmlrequest) {

//准备发送请求

var req = "/SSH05/changeUni?proId=" +o.proId + "&coId=" +o.coId+"&surl="+Math.random();
window.alert(req);
//打开请求
xmlrequest.open("get", req, true);
xmlrequest.send(req);
}
[/code]