`

ajax完美解决的一个麻烦问题

    博客分类:
  • Ajax
阅读更多
最近老总提了一个小功能,在搜索网吧列表的时候加上网吧所属代理商这个条件,原有的搜索条件是一个地区二级联动,现在需要根据不同的地区显示不同的代理商集合。
即在触发地区下拉框的onchange事件时,代理商的下拉框选项也相应的改变,比如选择地区 湖南—〉长沙,那么代理商下拉框只显示长沙的代理商。
    本来认为这个很好实现,但实际改起来的时候发现问题多多,主要问题是原有的地区联动是用js实现的,它的数据源是一个xml文件,当然如果下拉框是服务器端控件那么问题是很好解决的,现在是html控件一下子似乎还真有些不好改,想了几种办法实现起来都不理想,最后将思路转向用ajax来实现问题才迎刃而解,现在仔细一想,像这种情况似乎只有用ajax才能比较好的解决,如果是在地区下拉框的onchange事件里向后台进行一次提交,将地区下拉框的id传过去的话,实际上产生的回发会将地区联动下拉框重新初始化。
    现在我具体谈谈这个ajax实现的过程。
    首先页面当然需要定义一个下拉框的html控件。

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

接下来当然是定义XmlHttpRequest对象。
   

var xmlhttp;
function CreateXmlHttp()
   { 


   //非IE浏览器创建XmlHttpRequest对象
    if(window.XmlHttpRequest)
    {
     xmlhttp=new XmlHttpRequest();
    }
    //IE浏览器创建XmlHttpRequest对象
     if(window.ActiveXObject)
    {
    try
    {
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch(e)
    {
    try{
     xmlhttp=new ActiveXObject("msxml2.XMLHTTP");
     }
     catch(ex){}
    }
    }
   } 

这个在我的多篇blog文章里都有阐述,就不多说了。

接下来当然是利用该对象来发送条件,获得数据,并且将获得的数据绑定到agent这个下拉框。
在地区下拉框的onchange事件里面触发函数AjaxSend();


function AjaxSend()
{
     //创建XmlHttpRequest对象
     CreateXmlHttp();    
     if(!xmlhttp)
     {
         alert("创建xmlhttpRequest发生异常!");
         return false;
     }  
     //获取地区下拉框的value值,作为条件发送
     var ss=document.getElementById("a2").value.substring(0,4);
     }
    //要发送的url,UserAjax我专门用来取数据
     url="UserAjax.aspx?area="+ss;
     xmlhttp.open("POST",url,false);
       
  
     xmlhttp.onreadystatechange=function()
     {

         if(xmlhttp.readyState==4)
         {
             if(xmlhttp.status==200)
             { 
               //清空原下拉框
              document.getElementById("agent").options.length=0;          
               //str为返回的一个字符串,形式为"0001/代理商1,0002/代理商2,0003/代理商3"
               var str=xmlhttp.responseText;
              //将该字符串分割为数组形式
               var strs=str.split(",");
               document.getElementById("agent").options.add(new Option("----------","000000"));
               for(var i=0;i<strs.length-1;i++)
               {
                //获取value值(编号)
                var a=strs[i].substring(0,strs[i].lastIndexOf("/"));
                //获取绑定内容
                var b=strs[i].substring(strs[i].lastIndexOf("/")+1,strs.length);
                //绑定到下拉框
                document.getElementById("agent").options.add(new Option(b,a));              
               }
                
             }
          }
      }          
      xmlhttp.send();
}
另外顺便介绍一下UserAjax接收到该地区编号后获取数据返回字符串的过程。


string Area = Request.QueryString["area"].ToString();
        DataTable data = "生成DataTable,涉及到公司核心代码,省略"
        string aa = "";
        for (int i = 0; i < data.Rows.Count; i++)
        {
            if (aa == "")
            {
                aa = data.Rows[i]["id"].ToString()+"/"+data.Rows[i]["name"].ToString();
            }
            else
            {
                aa = aa + "," + data.Rows[i]["id"].ToString() +"/"+ data.Rows[i]["name"].ToString();
            }
        }
       Response.Write(aa);这样,一个比较棘手的问题用ajax就获得了完美解决,并且不会因向后台回发而导致下拉框初始化,导致选项改变,亲爱的朋友,看了这个例子,你对ajax是不是也有了
更好的认识呢?

分享到:
评论

相关推荐

    完美解决ajax访问遇到Session失效的问题

    现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象发起的而不

    解决Ajax 发送多个请求引发的并发问题

    这里提供一个使用jQuery的Ajax请求队列示例: ```javascript var requestQueue = []; function sendAjaxRequest(url, callback) { if (requestQueue.length === 0) { $.ajax({ url: url, success: function...

    Ajax中文乱码问题解决方案

    本文将深入探讨Ajax中文乱码问题的成因,并提供一系列解决方案。 **一、问题原因** 1. **编码格式不一致**:服务器与客户端(浏览器)之间使用的字符编码格式不同,例如服务器使用GBK编码,而浏览器使用UTF-8编码...

    ajax跨域问题的解决办法

    ajax跨域问题的解决办法 ajax跨域问题是指在使用ajax技术时遇到的跨域限制问题,即ajax请求不能跨域访问其他域的服务器资源。这种限制是由于浏览器的同源策略所引起的,同源策略规定一个域下的脚本只能访问该域下的...

    AJAX完美示例极强

    - `DadaAJAX`:这可能是一个示例项目的文件夹,包含了使用AJAX技术实现的具体功能,如动态加载数据、异步表单提交等。开发者可以通过查看和运行这些代码来理解AJAX的实际应用。 - `AjaxPro实例说明(入门)转 - my...

    Ajax跨域问题 解决方案

    ### Ajax跨域问题解决方案 #### 一、什么是Ajax跨域 **原理:** Ajax跨域问题的核心在于浏览器的“同源策略”。同源策略是一种安全措施,用于限制一个域名下的文档或脚本如何与另一个来源的资源进行交互。简单来说...

    解决ajax不能访问本地文件问题(利用js跨域原理)

    在本文中,博主提出了一个解决AJAX本地文件访问的方法,即把原本要读取的JSON文件转换为JavaScript对象文件。例如,将`abc.json`内容转换为`var abc = {"pro": {...}}`这样的JavaScript代码,然后创建一个名为`abc....

    Ajax跨域访问解决方案

    在服务器端,设置一个代理接口,这个接口接收客户端的Ajax请求,然后转发到目标服务器获取数据,再将数据返回给客户端。这种方式适用于前后端分离的架构,前端通过与同一源的代理服务器通信,实现跨域。 5. **...

    解决ajax跨域请求问题

    然而,跨域请求是Ajax的一个常见问题,由于浏览器的同源策略限制,Ajax请求只能向与当前页面同源的服务器发送。本文将深入探讨如何解决Ajax跨域请求的问题。 首先,理解“同源策略”是解决问题的关键。同源策略是...

    ajax乱码解决方案

    总的来说,解决Ajax乱码问题的关键在于理解字符编码的工作原理,确保数据在整个传输过程中的编码与解码一致性,以及正确设置服务器和客户端的编码设置。在实际应用中,还应考虑跨平台和跨浏览器的兼容性,以确保解决...

    解决ajax请求后台,有时收不到返回值的问题

    昨天下午做项目遇到一个问题,贴出来方便以后翻阅,也给大家个参考。 问题: 具体做的是个文件导入的功能,导入的功能是成功了,但是界面一直得不到返回值,排查了一下午,调试的时候是可以有返回的,但是关掉浏览器...

    ajax快速解决参数过长无法提交成功的问题

    比如我们经常这样写一个ajax的post请求: $.ajax({ type: "post", // post or get contentType:"application/json;charset=utf-8", data: “requestTag=”+tag+"&content="+content, //请求参数 url: "po

    ajax嵌套解决方式

    然而,在实际应用中,有时会遇到需要在一个AJAX请求中嵌套另一个AJAX请求的情况,这通常是为了获取更多的数据或者进行更复杂的业务逻辑处理。但是由于AJAX本身的异步特性,简单的嵌套往往会导致数据无法正确读取的...

    Ajax中responseText返回的是一个页面而不是一个值

    自己在struts2中的写好了业务逻辑用response返回的内容却是... 您可能感兴趣的文章:ajax的responseText乱码的问题的解决方法jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXMLAjax request response 乱码解决

    完美解决ajax跨域请求下parsererror的错误

    ajax也会提示一个parseerror的错误. 出现这个错误,大都是不良书写习惯,或者语法不当造成的. 关于ajax的错误,请使用: error:function(XMLHttpRequest, textStatus, errorThrown){ $("div").html(textStatus); $(...

    ajax跨域解决办法

    4. **服务器代理**:在服务器端设置一个代理,将客户端的AJAX请求转发到目标服务器,然后将结果返回给客户端。这通常通过修改服务器配置或编写中间件实现,例如Apache或Nginx的反向代理功能。 5. **Flash跨域**:...

    jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法

    jquery中ajax请求后台数据成功后既不执行success也不执行error,此外系统报错:Uncaught SyntaxError: Unexpected identifier at Object.success,但后台能够返回数据,原代码如下: var source=[]; $.ajax({ ...

    完美解决iframe跨域问题

    本文将深入探讨如何“完美解决iframe跨域问题”,并介绍其底层的`window.name`转换代理实现。 **一、iframe跨域的基本概念** 1. **什么是iframe**:iframe是一种HTML元素,允许在单个网页中嵌入另一个网页。它通过...

    解决ajax返回innerHTML中javascript不能运行问题

    在实际应用中,我们经常会遇到使用 Ajax 返回某一个网页的内容到模板页面的某一个 `&lt;div&gt;` 标签中显示的操作。如果返回的值仅仅是文本类数据,不会影响模板页面的功能,但是如果返回的数据包括 JavaScript,那么直接...

    解决js ajax同步请求造成浏览器假死的问题

    总结一下,解决js ajax同步请求造成浏览器假死的问题的关键在于理解浏览器单线程的特性及其在执行同步请求时会阻塞UI线程的行为。开发者可以通过使用异步请求或将耗时的请求操作放入setTimeout等JavaScript定时器中...

Global site tag (gtag.js) - Google Analytics