今日两道面试题

1. 关于this的面试题

function func(){
  //这里面的this,代指window
}
func() // window.func()
---------------------------------------------------
function Func(){
  this.name = 'alex'; //this代指obj,因为Func是一个类
}
obj = new Func()
console.log(obj.name)
---------------------------------------------------
function Func(){
  thia.name = 'alex' // this代指obj
  this.show = function(){
    console.log(this);
  }
}
obj = new Func();
obj.show();
---------------------------------------------------
userInfo = {
  name:'alex',
  age:19,
  show:function(){
    console.log(this) //this代指userInfo
  }
}
userInfo.show()
---------------------------------------------------
userInfo = {
  name:'alex',
  age:19,
  show:function(){
    console.log(this); //this代指userInfo
    (function(){
      console.log(this);//this代指window
    })()
  }
}

---------------------------------------------------
function Func(){
  this.name = 'alex'; //this代指obj
  this.show = function(){
    console.log(this); //obj
    (function(){
      console.log(this); // this代指window
    })()
  }
}
---------------------------------------------------
userInfo = {
  name:'alex',
  age:18,
  show:function(){
    console.log(this); // userInfo
    var that = this
    (function(){
      console.log(that); // userInfo
    })()
  }
}



2. JSONP和CORS

由于浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性。
注意:
  1.同源策略是浏览器限制的
  2.浏览器同源策略并不是对所有请求制约:
    制约:XmlHttpresponse
    不制约:img/iframe/script等具有src属性的标签

JSONP实现跨域请求:
  JSONP利用script标签的src属性解决跨域问题,因为浏览器允许script标签跨域

客户端:
<script>

 
  

    $.ajax({
    url: 不同域名的url,
    type: 'GET',
    dataType: 'JSONP',
    jsonp: callback,  ---------> 作用:在请求的url的后面加上?callback='list',list作为对方的相应数据的包裹函数:
                        -------> HttpResponse(list(响应数据))
    jsonpCallback: 'list'
    
    })

 
  

</script>

 
  


请求数据的本质: 看似用了ajax请求数据,其实没有。如果把url放到HTML中的img标签、script标签,iframe标签的中的src中就不会被浏览器的同源访问限制住。所以基于这种思想,就有了JSONP的的作用本质。

 
  

在客户端做了两件事:
  1.创建了一个script标签:<script src='不同域名的url'></script>
  2.创建了一个函数:
    <script>
      function list(args){
        对请求到的args进行处理;
      }
    </script>
对方的返回数据也必须符合一个规则:
  func = request.GET.get('callback')
  HttpResponse(func(数据))

 
  

注意:
  JSONP只能发送GET请求,因为它的本质是把一个url放到src中,发送到对方,请求数据,而不能发送数据。

 

CORE:

随着技术的发展,现在的浏览器可以支持主动设置从而允许跨域请求,即:跨域资源共享(CORS),其本质是设置响应头,使得浏览器允许跨域请求。

 

简单请求and非简单请求:

条件:
  1、请求方式:HEAD,GET、POST
  2、请求头信息:
    Accept

    Accept-Language
 
  
        Content-Language
 
  
        Last-Event-ID
 
  
        Content-Type 对应的值是以下三个中的任意一个
 
  
                                application/x-www-form-urlencoded
 
  
                                multipart/form-data
 
  
                                text/plain
注意:同时满足以上两个条件时,是简单请求,否则是非简单请求
 
简单请求和非简单请求的区别:
  简单请求:一次请求
  非简单请求:两次请求,在发送数据之前用于做“预检”,只有“预检”通过之后才再发送一次请求用于数据传输。
 
关于“预检”:
  - 请求方式:OPTION
  -“预检”其实是做检查,检查如果通过则允许传输数据,检查不通过则不再发送真正想要发送的信息
  -如何“预检”:
    1.如果复杂请求时PUT等请求,则服务器需要设置允许请求,如果服务器没有设置,则“预检”不会通过。
      Access-Control-Request-Method
    2.如果复杂请求设置了请求头,则服务器需要设置允许某请求头,否则“预检”不通过。
      Access-Control-Request-Headers
 

 

基于CORS实现Ajax请求:

1. 支持跨域,简单请求(Ajax请求,可以发送数据)
  服务器设置响应头:Access-Control-Allow-Origin = ‘域名’或‘*’
    客户端:
       $.ajax({
                url: "http://c2.com:8000/test/",
type: 'GET', dataType: 'text', success: function(data, statusText, xmlHttpRequest){ console.log(data); } })
    
    服务端:
      只需要设置响应头:
      response = HttpResponse(数据)
      response['Access-Control-Allow-Origin'] = "客户端的域名"   -----> 意思是只能指定的客户端可以请求,其它的不用。
      response['Access-Control-Allow-Origin'] = "*"  -----> 所有的请求都可以
      return response
      
2. 支持跨域,复杂请求
  由于复杂请求时,首先会发送“预检”请求,如果“预检”成功,则发送真是数据。
    1.“预检”请求时,允许请求方式则需要服务器设置响应头:Access-Control-Request-Method
    2.“预检”请求时,允许请求头则需要服务器设置响应头:Access-Control-Request-Headers
    3.“预检”缓存时间,服务器设置响应头:Access-Control-Max-Age

  
  客户端:
      $.ajax({
                url: "http://c2.com:8000/test/", type: 'PUT', dataType: 'text', headers: {'k1': 'v1'}, success: function(data, statusText, xmlHttpRequest){ console.log(data); } })
  服务器端:
   if request.method == "OPTIONS":
    # 预检
    response = HttpResponse()
    response['Access-Control-Allow-Origin'] = "*" -----> 允许所有的客户端请求
    response['Access-Control-Allow-Method'] = "PUT" ---->"预检"请求时,允许请求方式
    response['Access-Control-Allow-Header'] = "xxx" ---->"预检"请求时,允许请求头
    response['Access-Control-Allow-Header'] = "xxx" ---->告诉请求端可以xxx请求头
    return response
  elif request.method == "PUT":
     response = HttpResponse(数据)
     response['Access-Control-Allow-Origin'] = "*"
     return response

      





 

转载于:https://www.cnblogs.com/guomeina/p/7866832.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值