웹 프론트엔드 JS 튜토리얼 Ajax 드롭다운 상자 컨트롤을 검색하기 위해 텍스트를 입력할 수 있는 ComBox 구현 방법

Ajax 드롭다운 상자 컨트롤을 검색하기 위해 텍스트를 입력할 수 있는 ComBox 구현 방법

Dec 09, 2016 am 10:27 AM
ajax

GooFunc.js文件

//获取一个DIV的绝对坐标的功能函数,即使是非绝对定位,一样能获取到
function getElCoordinate(dom) {
 var t = dom.offsetTop;
 var l = dom.offsetLeft;
 dom=dom.offsetParent;
 while (dom) {
  t += dom.offsetTop;
  l += dom.offsetLeft;
    dom=dom.offsetParent;
 }; return {
  top: t,
  left: l
 };
}
//兼容各种浏览器的,获取鼠标真实位置
function mousePosition(ev){
    if(!ev) ev=window.event;
  if(ev.pageX || ev.pageY){
    return {x:ev.pageX, y:ev.pageY};
  }
  return {
    x:ev.clientX + document.documentElement.scrollLeft - document.body.clientLeft,
    y:ev.clientY + document.documentElement.scrollTop - document.body.clientTop
  };
}
//给DATE类添加一个格式化输出字串的方法
Date.prototype.format = function(format) 
{ 
  var o = { 
   "M+" : this.getMonth()+1, //month
   "d+" : this.getDate(),  //day
   "h+" : this.getHours(),  //hour
   "m+" : this.getMinutes(), //minute
   "s+" : this.getSeconds(), //second ‘
     //quarter
   "q+" : Math.floor((this.getMonth()+3)/3),
   "S" : this.getMilliseconds() //millisecond
  } 
  if(/(y+)/.test(format)) format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4 - RegExp.$1.length)); 
  for(var k in o)if(new RegExp("("+ k +")").test(format)) 
   format = format.replace(RegExp.$1, 
    RegExp.$1.length==1 ? o[k] : 
     ("00"+ o[k]).substr((""+ o[k]).length)); 
  return format;
}
 
 
<pre name="code" class="javascript"><pre name="code" class="javascript"><pre name="code" class="javascript"><pre name="code" class="javascript">GooCombo.JS文件



/*下拉框定义--GooCombo类*/
//dom :要被绑定的DOM对象,必须要有其ID或者NAME,且未被JQUERY对象化
//property :JSON变量,SLIDER的详细参数设置
//目前,构造函数可接受用普通DOM容器或者直接传送SELECT控件来进行渲染
function GooCombo(dom,property){
    this.$div=null;//渲染完毕后最父框架的DIV
    this.$id=null;//this.$div中SELECT控件的ID
    this.$name=null;//this.$div中SELECT控件的NAME
    this.$width = property.width; //下拉框控件的宽度,必填项
   
    this.$haveIcon=property.haveIcon||false;
    this.$input = $("<input type=&#39;text&#39; value=&#39;" + property.text + "&#39; " + (property.readOnly ? "readonly=&#39;readonly&#39;" : "") + (this.$haveIcon ? " style=&#39;margin-left:20px;width:" + (this.$width - 39) + "px&#39;" : "") + "/>"); //下拉框控件中始终显示的文本框INPUT
    this.$btn=$("<div class=&#39;btn_up&#39;></div>");//下拉框右部的按钮
    this.$data=[];//下拉框控件的所有显示文字和值,二维数组
    this.$type="basic";//下拉框控件的运行模式,有basic基本,multiple可多选,filter过滤显示 三种,默认为basic
    this.$selectHeight=property.selectHeight||0;
    this.$list=$("<ul style=&#39;width:"+(this.$width-2)+"px;height:"+property.selectHeight+"px;&#39;></ul>");//下拉框的列表JQUERY对象
    this.$lastSelect=null;//当前最近一次被选中的单元,在this.$type="multiple"时,它将不发挥其记录作用
    this.$select = null; //保存所选值的单元一般为select控件
    this.$autoLoad=false;//是否动设置为动态载入数据,既下拉动作触发时再载入数据,默认为FALSE()
    this.$alreadyLoad=false;//是否已经载入完了数据,默认为false
    //设置为动态自动获取数据(渲染后Combo中的input框被选中后载入数据)
    this.setAutoLoad=function(bool){
        this.$autoLoad=true;
    };
    if(property.autoLoad) this.setAutoLoad(property.autoLoad);
    this.$ajaxType=null;//,其变量为一个远程链接参数的JSON数组,格式例如:{url:"website/pp.php",type:"POST",para:(与JQUERY中的AJAX方法中传参DATA一样)}默认为空
    this.setAjaxType=function(json){
        this.$ajaxType.url=json.url;
        this.$ajaxType.type=json.type;
        this.$ajaxType.para=json.para;
        this.$ajaxType.dataType=json.dataType;
    };
if (property.ajaxType) this.setAjaxType(property.ajaxType);
 
 
    //开始构造函数主要内容
    if(dom!=null && dom.tagName=="SELECT"){
        var temp="";
        for(var i=0;i<dom.length;i++){
            this.$data[i]=[(dom.options[i].value||dom.options[i].text),dom.options[i].text,""];
            temp+="<a href=&#39;#&#39;><p "+"value=&#39;"+this.$data[i][0]+"&#39;>"+this.$data[i][1]+"</p></a>";
        }
        this.$list.append(temp);
        this.$id=dom.id;
        this.$name=dom.name;
        if(dom.multiple) this.$type="multiple";
        this.$select=$(dom);
        this.$select.wrap("<div class=&#39;Combo&#39; id=&#39;Combo_"+this.$id+"&#39;></div>")
        this.$div=this.$select.parent(".Combo");
    }
    else{
        this.$div=$(dom);
        this.$div.addClass("Combo");
        this.$select=$("<select></select>");
        this.$div.append(this.$select);
    }
    //this.$div.before(this.$septum);
    this.$div.css({width:this.$width+"px"});
    this.$div.append("<div class=&#39;text&#39; style=&#39;width:"+(this.$width-19)+"px;&#39;></div>").append(this.$btn).append(this.$list);
    this.$div.children("div:eq(0)").append("<div class=&#39;top_border&#39;></div>").append(this.$input);
     
    //如果DOM为一个SELECT控件,则property中的属性还可以覆盖掉原来的ID,NAME ,type="multple"的默认设置
    //ID,NAME,TYPE如果在传入SELECT时就已经通过SELECT来定义,则PROPERTY中可以不用再写
    if(property.id)     {this.$id=property.id;this.$select.attr("id",property.id);}
    if(property.name)   {this.$name=property.name;this.$select.attr("name",property.name);}
    if(property.type){
        this.$type=property.type;
        if(property.type=="multiple") {this.$select.attr("size",1);this.$select.attr("multiple",property.type);}
        else    this.$select.removeAttr("multiple");
    }
    //载入一组数据的方法
    this.loadListData = function (data) {
      this.$data = [];
      if (this.$list.children("a").length > 0) {
        this.$list.empty();
        this.$select.empty();
      }
      temp = "", temp2 = "";
      for (i = 0; i < data.length; ++i) {
        this.$data[i] = [data[i][0], data[i][1], data[i][2] || ""];
        if (this.$type== "filter")//在这里可以修改你想类型 basic 当鼠标点击进去是否展现初始数据
          temp += "<a href=&#39;#&#39;><p " + (this.$haveIcon ? "style=&#39;text-indent:19px;background:" + this.$data[i][2] + "&#39; " : "") + "value=&#39;" + this.$data[i][0] + "&#39;>" + this.$data[i][1] + "</p></a>";
        temp2 += "<option value=&#39;" + this.$data[i][0] + "&#39;>" + this.$data[i][1] + "</option>";
      }
      if (this.$type == "filter")
       
     
      this.$list.append(temp);
      this.$select.append(temp2);
      this.$alreadyLoad = true;
    };
    if(property.data)   this.loadListData(property.data);
    //动态远程载入数据,AJAX请求的参数将读取this.$ajaxType中的设置
    this.loadListDataAjax=function(){
        var inthis=this;
        $.ajax({
              type:this.$ajaxType.type,
              url:this.$ajaxType.url,
              dataType:this.$ajaxType.dataType,
              data:this.$ajaxType.para,
        success:function(data){
            inthis.loadListData(data);
        }});
 
};
 
//提示文字
$("input[type=&#39;text&#39;]").each(function () {
  if ($(this).val() == property.text) {
    $(this).bind("focus", function () {
      $(this).val("");
    }).blur(function () {
      $(this).val(property.text)
    });
 
  }
});
 
    //绑定当INPUT框被选中时的事件
    this.$input.bind("focus", { inthis: this }, //如果this.$autoLoad或!this.$alreadyLoad有一个为FALSE,则ajaxType将无效,可不传
    function (e) {
      if (e && e.preventDefault) e.preventDefault(); //阻止默认浏览器动作(W3C)
      else window.event.returnValue = false; //IE中阻止函数器默认动作的方式
      var inthis = e.data.inthis;
//    inthis.$autoLoad = true;
// 
// 
//    inthis.$alreadyLoad = false;
//    inthis.$ajaxType = false;
      if (!inthis.$alreadyLoad && inthis.$autoLoad) {
 
        if (inthis.$ajaxType) {//如果是远程AJAX获取数据
 
          inthis.loadListDataAjax();
        }
        else
      {
          inthis.loadListData(inthis.$data);
        }
 
      }
      var list = inthis.$list;
 
      var height = inthis.$selectHeight;
      var width = inthis.$width;
      list.css("display", "block");
      $(document).bind("mouseup", function (e) {
        var locate = getElCoordinate(list.get(0));
        var ev = mousePosition(e);
        if (locate.left + width < ev.x || locate.left > ev.x || locate.top - 22 > ev.y || locate.top + height + 2 < ev.y) {
          list.css("display", "none");
        }
        this.onmouseup = null;
        return false;
      });
      return false;
    });
    //绑定当INPUT框中的内容被改变时的事件
    if(!this.$readOnly){
        if(this.$type=="filter"){//当type=="filter"时
          this.$input.bind("change", { inthis: this }, function (e) {
            var inthis = e.data.inthis;
            //var text=""+this.value;
            var text = $.trim(this.value)
 
            var data = inthis.$data;
            var temp = "";
 
            if (inthis.$ajaxType) {//如果ajaxType属性有设置,则filter模式下,下拉框控件将在每次change时,动态从获取数据
              inthis.$ajaxType.para["search"] = text; //后台需要对REQUEST传入的search变量有一个向前模糊匹配的查询功能
              inthis.loadListDataAjax();
            }
            else {
              for (var i = 0; i < data.length; ++i)
          {
                if (data[i][1].indexOf(text) == 0)
                temp +="<a href=&#39;#&#39;><p " + (inthis.$haveIcon ? "style=&#39;text-indent:19px;background:" + data[i][2] + "&#39; " : "") + "value=&#39;" + data[i][0] + "&#39;>" + data[i][1] + "</p></a>";
              }
              inthis.$list.empty();
              inthis.$list.append(temp);
            }
          });
        }
        else{
          this.$input.bind("change", { inthis: this }, function (e) {
            var text = this.value;
            var inthis = e.data.inthis;
            var data = e.data.inthis.$data;
          
            for (var i = 0; i < data.length; ++i) {
              if (data[i][1] == text) {
                if (inthis.$lastSelect)
                  inthis.$lastSelect.removeClass("active");
                inthis.$lastSelect = inthis.$list.children("a:eq(" + i + ")").addClass("active");
                now = inthis.$list.children("a:eq(" + i + ")").children("p");
                inthis.$select.val(data[i][0]);
                if (inthis.$haveIcon) {
                  $(this).parent(".text").css({
                    background: now.css("background"),
                    "background-image": "url(../images/combo_icon.gif)",
                    "background-position": now.css("background-position"),
                    "background-repeat": now.css("background-repeat")
                  });
                }
                break;
              }
            }
          });
        }
        var once=null;
        this.$input.bind("keyup", { input: this.$input, list: this.$list }, function (e) {
          if (!e) e = window.event;
          if (e.keyCode == 13)
            e.data.list.css("display", "none");
          else if (e.keyCode == 40) {
            var temp = e.data.list.children("a:eq(0)");
            temp.focus();
            temp.toggleClass("focus");
          }
          else {
            //alert("进入keyup");
            once = null;
            once = setTimeout(function () { e.data.input.change(); }, 500);
          }
        });
    }
    //绑定下拉按钮的事件
    this.$btn.bind("mousedown",function(){
        inthis=$(this);
        inthis.removeClass("btn_up");
        inthis.addClass("btn_down");
    });
    this.$btn.bind("mouseup",{input:this.$input},function(e){
        inthis=$(this);
        inthis.removeClass("btn_down");
        inthis.addClass("btn_up");
        e.data.input.focus();
    });
    //选中下拉框中一个指定索引的值(如果是multiple模式,且这个值原来已经被选定,则运行此函数后将会取消该选定)
    this.selectValue=function(index){
        if(index>0&&index<this.$data.length){
            var p=this.$list.children("a:eq("+index+")");
            if(this.$lastSelect)    this.$lastSelect.removeClass("active");
            this.$lastSelect=p;
            p.click();
        }
    };
    //绑定下拉列表单元被点击时的事件
    this.$list.bind("click",{inthis:this},function(e){
        if ( e && e.preventDefault )    e.preventDefault();//阻止默认浏览器动作(W3C)
        else    window.event.returnValue = false;//IE中阻止函数器默认动作的方式
        if(!e) e=window.event;
        var clicked=$(e.target);
        var inthis=e.data.inthis;
        if(clicked.attr("tagName")=="A")    clicked=clicked.children("p");
        else if(clicked.attr("tagName")=="UL"){
            this.style.display="none";
            return;
        }              
        if(inthis.$haveIcon){
            inthis.$input.parent(".text").css({
            background:clicked.css("background"),
            "background-image":"url(../images/combo_icon.gif)",
            "background-position":clicked.css("background-position"),
            "background-repeat":clicked.css("background-repeat")   
            });
        }
        if(inthis.$type!="multiple"){
            if(inthis.$lastSelect)  inthis.$lastSelect.removeClass("active");
            inthis.$lastSelect=clicked.parent("a").addClass("active");
            this.style.display="none";
            inthis.$select.val(clicked.attr("value"));
            inthis.$input.val(clicked.text());
        }
        else{
            clicked.parent("a").toggleClass("active");
            var optionList=inthis.$select.get(0).options;
            for(var i=0;i<optionList.length;++i){
                if(optionList[i].value==clicked.attr("value")){
                    optionList[i].selected=!optionList[i].selected;
                    break;
                }
            }
            inthis.$input.val(clicked.text()+" , ……");
        }
        inthis.$select.change();
        //alert(inthis.$select.val());
        return false;
    });
    //绑定当用户用鼠标上/下滑过选择列表内容时的事件
    this.$list.bind("mouseover",{list:this.$list},function(e){
        if(!e) e=window.event;
        var clicked=$(e.target);
        if(clicked.attr("tagName")=="P")    clicked=clicked.parent("a");
        else if(clicked.attr("tagName")=="UL"){
            return;
        }
        clicked.focus();
        clicked.addClass("focus");
    });
    this.$list.bind("mouseout",{list:this.$list},function(e){
        if(!e) e=window.event;
        var clicked=$(e.target);
        if(clicked.attr("tagName")=="P")    clicked=clicked.parent("a");
        else if(clicked.attr("tagName")=="UL")  return;
        clicked.removeClass("focus");
    });
    //绑定当用户用上/下方向键选择列表内容时的事件
    this.$list.bind("keydown",{inthis:this},function(e){
        if(!e) e=window.event;
        var inthis=e.data.inthis;
        if(e.keyCode==13){//回车
            if ( e && e.preventDefault )    e.preventDefault();//阻止默认浏览器动作(W3C)
            else    window.event.returnValue = false;//IE中阻止函数器默认动作的方式
            var clicked=$(e.target);
            if(clicked.attr("tagName")=="P")    clicked=clicked.parent("a");
            else if(clicked.attr("tagName")=="UL")  return;
            clicked.focus();
            clicked.click();
            return false;
        }
        else if(e.keyCode==40){
            var clicked=$(e.target);
            if(clicked.attr("tagName")=="P")    clicked=clicked.parent("a");
            else if(clicked.attr("tagName")=="UL")  return;
            var now=$(e.target);
            var next=$(e.target).next("a:eq(0)");
            if(next.length>0){
                now.removeClass("focus");
                next.addClass("focus");
                next.focus();
            }
        }
        else if(e.keyCode==38){
            var clicked=$(e.target);
            if(clicked.attr("tagName")=="P")    clicked=clicked.parent("a");
            else if(clicked.attr("tagName")=="UL")  return;
            var now=$(e.target);
            var prev=$(e.target).prev("a");
            if(prev.length>0){
                now.removeClass("focus");
                prev.addClass("focus");
                prev.focus();
            }
        }
    });
    //返回下拉框的被选值//如果是多选,则会返回一串值构成的字符串,以逗号隔开
    //此下拉框也可放在一般的FORM之中,并像普通的SELECT下拉菜单控件一样操作,当FORM提交时,后台可request获取一个被选取值的数组
    this.getValue=function(){
        return this.$select.val();
    };
 
    //绑定当控件中隐藏的SELECT的值变化以后,触发的方法,通过对其设置,可达到drop-on-drop的多个下拉框相互联动功能,参数Fn为要触发执行的函数
    this.bindValueChange=function(Fn){
      this.$select.bind("change", Fn);
 
    };
    //删除一个选择项,index为定位参数,从0开始(即第一行的选择项)
    this.delItem=function(index){
        if(index>-1&&index<this.$data.length){
            this.$data.splice(index,1);
            this.$select.get(0).options.remove(index);
            this.$list.children("a:eq("+index+")").remove();
        }
    };
    //增加一个选择项,项,index为定位参数,从0开始(即第一行的选择项)
    this.addItem=function(index,Item){
        if(index=this.$data.length){//如果是加在最末尾
            this.$data[index]=Item;
            this.$list.append("<a href=&#39;#&#39;><p "+(this.$haveIcon? "style=&#39;text-indent:19px;background:"+Item[2]+"&#39; " : "")+"value=&#39;"+Item[0]+"&#39;>"+Item[1]+"</p></a>");
        }
        else{
            this.$data.splice(index,0,Item);
            this.$list.children("a:eq("+index+")").before("<a href=&#39;#&#39;><p "+(this.$haveIcon? "style=&#39;text-indent:19px;background:"+Item[2]+"&#39; " : "")+"value=&#39;"+Item[0]+"&#39;>"+Item[1]+"</p></a>");
        }
        this.$select.get(0).options.add(new Option(Item[1], Item[0]));
    };
    //清除所有选项
    this.clearItems=function(){
        this.$data=null;
        this.$data=[];
        this.$list.empty();
        this.$select.get(0).options.length=0;
        this.$select.empty();
        this.$alreadyLoad=false;
    };
}
 
  
 
//将此类的构造函数加入至JQUERY对象中
jQuery.extend({
    createGooCombo: function(dom,property) {
        return new GooCombo(dom,property);
 }
}); 

HTML页面:(要先引入jquery 库)
$(document).ready(function () {

//创建控件开始
var property =
{
id: "demo",
name: "demo",
type: "filter",
readOnly: false,
width: 160,
selectHeight: 140,
autoLoad: true,
haveIcon: false,
text: "可输入员工姓名查找"
}
var combo = $.createGooCombo(document.getElementById("combo"), property);
combo.loadListData(datas);
//创建控件结束
})

datas是由ashx一般处理文件生成二维数组的json字符串 var datas=["+jsonString+"]
 
  public string CreateJsonParameters(DataTable dt)
  {
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
 
    if (dt != null)
    {
      for (int i = 0; i < dt.Rows.Count -1; i++)
      {
        if (i < dt.Rows.Count - 1)
        {
          sb.Append("[" + dt.Rows[i]["EmployeeID"].ToString() + ", " + dt.Rows[i]["EmployeeNameID"].ToString() + "],");
         
        }
        else if (i == dt.Rows.Count - 1)
        {
          sb.Append("[" + dt.Rows[i]["EmployeeID"].ToString() + "," + dt.Rows[i]["EmployeeNameID"].ToString() + "],");
        }
      }
    }
       
     return   sb.ToString().TrimEnd(",".ToCharArray());
   
  }













   
로그인 후 복사

   


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

jQuery AJAX 요청에서 발생한 403 오류를 해결하는 방법 jQuery AJAX 요청에서 발생한 403 오류를 해결하는 방법 Feb 20, 2024 am 10:07 AM

제목: jQuery AJAX 요청의 403 오류를 해결하는 방법 및 코드 예제 403 오류는 서버가 리소스에 대한 액세스를 금지하는 요청을 의미합니다. 이 오류는 일반적으로 요청에 권한이 없거나 서버에서 거부되기 때문에 발생합니다. jQueryAJAX 요청을 할 때 가끔 이런 상황이 발생합니다. 이 기사에서는 이 문제를 해결하는 방법을 소개하고 코드 예제를 제공합니다. 해결 방법: 권한 확인: 먼저 요청한 URL 주소가 올바른지 확인하고 리소스에 액세스할 수 있는 충분한 권한이 있는지 확인하십시오.

jQuery AJAX 요청 403 오류를 해결하는 방법 jQuery AJAX 요청 403 오류를 해결하는 방법 Feb 19, 2024 pm 05:55 PM

jQuery는 클라이언트 측 개발을 단순화하는 데 사용되는 인기 있는 JavaScript 라이브러리입니다. AJAX는 전체 웹 페이지를 다시 로드하지 않고 비동기 요청을 보내고 서버와 상호 작용하는 기술입니다. 그러나 jQuery를 사용하여 AJAX 요청을 할 때 가끔 403 오류가 발생합니다. 403 오류는 일반적으로 보안 정책이나 권한 문제로 인해 서버 거부 액세스 오류입니다. 이 기사에서는 403 오류가 발생한 jQueryAJAX 요청을 해결하는 방법에 대해 설명합니다.

Ajax를 사용하여 PHP 메소드에서 변수를 얻는 방법은 무엇입니까? Ajax를 사용하여 PHP 메소드에서 변수를 얻는 방법은 무엇입니까? Mar 09, 2024 pm 05:36 PM

Ajax를 사용하여 PHP 메소드에서 변수를 얻는 것은 웹 개발의 일반적인 시나리오입니다. Ajax를 통해 데이터를 새로 고치지 않고도 페이지를 동적으로 얻을 수 있습니다. 이 기사에서는 Ajax를 사용하여 PHP 메소드에서 변수를 가져오는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 먼저 Ajax 요청을 처리하고 필요한 변수를 반환하기 위해 PHP 파일을 작성해야 합니다. 다음은 간단한 PHP 파일 getData.php에 대한 샘플 코드입니다.

jQuery AJAX 오류 403 문제를 해결하는 방법은 무엇입니까? jQuery AJAX 오류 403 문제를 해결하는 방법은 무엇입니까? Feb 23, 2024 pm 04:27 PM

jQueryAJAX 오류 403 문제를 해결하는 방법은 무엇입니까? 웹 애플리케이션을 개발할 때 jQuery는 종종 비동기 요청을 보내는 데 사용됩니다. 그러나 때때로 jQueryAJAX를 사용할 때 서버에서 액세스가 금지되었음을 나타내는 오류 코드 403이 발생할 수 있습니다. 이는 일반적으로 서버 측 보안 설정으로 인해 발생하지만 문제를 해결하는 방법이 있습니다. 이 기사에서는 jQueryAJAX 오류 403 문제를 해결하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. 만들다

PHP 및 Ajax: 자동 완성 제안 엔진 구축 PHP 및 Ajax: 자동 완성 제안 엔진 구축 Jun 02, 2024 pm 08:39 PM

PHP 및 Ajax를 사용하여 자동 완성 제안 엔진 구축: 서버측 스크립트: Ajax 요청을 처리하고 제안을 반환합니다(autocomplete.php). 클라이언트 스크립트: Ajax 요청을 보내고 제안을 표시합니다(autocomplete.js). 실제 사례: HTML 페이지에 스크립트를 포함하고 검색 입력 요소 식별자를 지정합니다.

PHP 대 Ajax: 동적으로 로드되는 콘텐츠를 생성하기 위한 솔루션 PHP 대 Ajax: 동적으로 로드되는 콘텐츠를 생성하기 위한 솔루션 Jun 06, 2024 pm 01:12 PM

Ajax(비동기 JavaScript 및 XML)를 사용하면 페이지를 다시 로드하지 않고도 동적 콘텐츠를 추가할 수 있습니다. PHP와 Ajax를 사용하면 제품 목록을 동적으로 로드할 수 있습니다. HTML은 컨테이너 요소가 있는 페이지를 생성하고 Ajax 요청은 로드한 후 요소에 데이터를 추가합니다. JavaScript는 Ajax를 사용하여 XMLHttpRequest를 통해 서버에 요청을 보내 서버에서 JSON 형식의 제품 데이터를 얻습니다. PHP는 MySQL을 사용하여 데이터베이스에서 제품 데이터를 쿼리하고 이를 JSON 형식으로 인코딩합니다. JavaScript는 JSON 데이터를 구문 분석하여 페이지 컨테이너에 표시합니다. 버튼을 클릭하면 제품 목록을 로드하라는 Ajax 요청이 트리거됩니다.

PHP와 Ajax: Ajax 보안을 향상하는 방법 PHP와 Ajax: Ajax 보안을 향상하는 방법 Jun 01, 2024 am 09:34 AM

Ajax 보안을 향상시키기 위해 다음과 같은 여러 가지 방법이 있습니다. CSRF 보호: 토큰을 생성하여 클라이언트에 보내고, 확인 요청 시 서버 측에 추가합니다. XSS 보호: 악성 스크립트 삽입을 방지하려면 htmlspecialchars()를 사용하여 입력을 필터링하세요. Content-Security-Policy 헤더: 악성 리소스 로드를 제한하고 스크립트 및 스타일 시트를 로드할 수 있는 소스를 지정합니다. 서버측 입력 유효성 검사: 공격자가 입력 취약성을 악용하지 못하도록 Ajax 요청에서 수신된 입력의 유효성을 검사합니다. 보안 Ajax 라이브러리 사용: jQuery와 같은 라이브러리에서 제공하는 자동 CSRF 보호 모듈을 활용하세요.

아약스 버전은 무엇입니까? 아약스 버전은 무엇입니까? Nov 22, 2023 pm 02:00 PM

Ajax는 특정 버전이 아니라 기술 모음을 사용하여 웹 페이지 콘텐츠를 비동기적으로 로드하고 업데이트하는 기술입니다. Ajax에는 특정 버전 번호가 없지만 ajax의 몇 가지 변형 또는 확장이 있습니다. 1. jQuery AJAX; 3. Fetch API 5. XMLHttpRequest 레벨 2; -전송된 이벤트 8, GraphQL 등

See all articles