AJAX无刷新联动,IE正常,在火狐无法实现

talenliao 2008-07-16 02:46:59
function send_request(method,url,content,responseType,callback){
http_request=false;
if(window.XMLHttpRequest){//Mozilla浏览器
http_request=new XMLHttpRequest();
if(http_request.overrideMimeType){
http_request.overrideMimeType("text/xml");
}
}
else{
try{
http_request=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
http_request=new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){}
}
}
if(!http_request){
window.alert("不能创建XMLHttpRequest对象实例。");
return false;
}
if(responseType.toLowerCase()=="text"){
http_request.onreadystatechange=callback;
}else{

window.alert("响应类别参数错误。");
return false;
}
if(method.toLowerCase()=="get"){
http_request.open(method,url,true);
}
else if(method.toLowerCase()=="post"){
http_request.open(method,url,true);
http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
}else{
window.alert("http请求类别参数错误。");
return false;
}
http_request.send(content);
}
这个是主要的ajax代码了

下面是取得城市数据的 function change(va)
{

if(va!='0')
{
var city = document.getElementById("City");
city.disabled=false;

var url="Handler.ashx?type=sheng&id="+va;
send_request("GET",url,null,"text",populateClass3);
}
}
function populateClass3(){
var f=document.getElementById("City");
if(http_request.readyState==4){
if(http_request.status==200){
var list=http_request.responseText;
var classList=list.split("|");
f.options.length=1;
for(var i=0;i<classList.length;i++){
var tmp=classList[i].split(",");
f.add(new Option(tmp[1],tmp[0]));
}
}else{
alert("您所请求的页面有异常。");
}
}
}
在IE很正常,可是在火狐就 一点用都没有,没有出现联动事件。
...全文
807 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
冬天的糊涂神 2008-07-18
  • 打赏
  • 举报
回复
在IE和FireFox中动态添加Option
tarObjName = document.getElementById("type");
for(var i=1;i<=arr.length;i++){
oOption = document.createElement("option");
oOption.text = arr[i-1];
oOption.value = i

if ( document.all ){
tarObjName.add(oOption);
}else{
tarObjName.appendChild(oOption);
}
oOption = null;
}

type为一个select对象

<select name="type" id="type">
</select>

在IE下要使用add方法而FireFox下要使用appendChild方法



haomas 2008-07-18
  • 打赏
  • 举报
回复
解决了那就结贴吧 我是接分的.........
talenliao 2008-07-18
  • 打赏
  • 举报
回复
呵呵,undefined消失了
原来是 在ashx返回的值搞错了!
搞编程真得小心翼翼啊!
srym 2008-07-18
  • 打赏
  • 举报
回复
make
talenliao 2008-07-18
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 sq_zhuyi 的回复:]
f.options.length=1;
for(var i=0;i <classList.length;i++){
var tmp=classList[i].split(",");
f.options[i+1]=new Option(tmp[1],tmp[0]);
}
[/Quote]
这个方法会导致 在火狐选择 “市”的时候 出现了一个 undefined 选项,怎么解决掉呢?
sun_Ke 2008-07-18
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 DemonAngle 的回复:]
火狐这东西不是.net人用的
[/Quote]
talenliao 2008-07-18
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 sq_zhuyi 的回复:]
f.options.length=1;
for(var i=0;i <classList.length;i++){
var tmp=classList[i].split(",");
f.options[i+1]=new Option(tmp[1],tmp[0]);
}
[/Quote]

呵呵,原来这位仁兄的方法是ok的啊。
有点不理解,换了一个方式怎么就可以了呢?
RHCL 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 kdalan 的回复:]
<script type="text/javascript">
function GiveSmID(objs){
document.getElementById("ClassBigToSMandPP1_HdSmallID").value = objs;
}

function GivePPID(objs){
document.getElementById("ClassBigToSMandPP1_HdPPID").value = objs;
}

function CreateXmlHttp(){
if(window.XmlHttpRequest){
xmlhttp=new XmlHttpRequest();
}
if(window.ActiveXObject){
try{

[/Quote]

这样可行的,对象创建两个浏览器的判断有所不同,嗯,mark
huxiaoiqing0007 2008-07-16
  • 打赏
  • 举报
回复
火狐的IE的XML对象生成方法不同,应该采用25楼的方法:
//创建xmlHttp对象
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
这样应该就可以了。
微软的ajax控件好像在火狐上也不能用!
brz97 2008-07-16
  • 打赏
  • 举报
回复
呵呵,楼上说火狐不好的人,我猜你们不怎么会用javascript
多浏览器兼容的确有些头疼,但还没你们说的那么严重
其实火狐才是标准,IE才是非标准
brooklyng60 2008-07-16
  • 打赏
  • 举报
回复
搞AJAX二级联动的都必须用到创建XMLHTTP吗?
我用JS后台声明后,用StringBuild拼出数组绑定,前台全是JS,事件也是JS的,一样可以
我的联动方法都封装了,就刚开始第一次读数据库
路人乙e 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 DemonAngle 的回复:]
火狐这东西不是.net人用的
[/Quote]

写代码不规范的典范!
路人乙e 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 sq_zhuyi 的回复:]
f.options.length=1;
for(var i=0;i <classList.length;i++){
var tmp=classList[i].split(",");
f.options[i+1]=new Option(tmp[1],tmp[0]);
}

[/Quote]

楼主试了没有,还在这折腾!
hitpop 2008-07-16
  • 打赏
  • 举报
回复
直接使用ajaxpro, 所有功能都支持.. 比ajax好用.
talenliao 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 grearo 的回复:]
更新二级联动的时候,直接将下拉控件全部HTML替换(在下拉框放到一个DIV中),而不是只更新下拉信息列表
[/Quote]

这个应该怎么替换掉啊?
不是很清楚哦
因为html我不是很懂,一接触就是.net了
DemonAngle 2008-07-16
  • 打赏
  • 举报
回复
火狐这东西不是.net人用的
avengercf 2008-07-16
  • 打赏
  • 举报
回复
try{
http_request=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
http_request=new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){}
}
这只是NEW出了新旧的IE,
if(window.XMLHttpRequest)
{
xml = new XMLHttpRequest();// 非IE浏览器请求
}
else if(window.ActiveXObject)
{
try{
xml = new ActiveXObject("Microsoft.XMLHTTP"); //新IE请求对象
}
catch(e1){
try{
xml= new ActiveXObject("Msxml2.XMLHTTP");// 老版IE 请求对象
}
catch(e2)
{
alert("无法识别的浏览器");
return false;
}
}
}
  • 打赏
  • 举报
回复
//创建xmlHttp对象
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
超级大笨狼 2008-07-16
  • 打赏
  • 举报
回复
www.dullwolf.cn/chess/
和我下棋吧
qinqinhao 2008-07-16
  • 打赏
  • 举报
回复
ding
ding
加载更多回复(22)

62,168

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧