跨域调用接口的方法之一:$.ajaxSetup()
跨域查询接口的数据,之前在公司时有发生过,产生的原因是,本地请求的域名或IP地址不一致,解除方法,也是修改域名和IP地址。比如:
接口中的数据来自IP地址:192.168.1.23/get.php
如果本地调用这个接口中的数据,必须要修改你的请求地址也同样为 192.168.1.23/get.php
通常的做法是将接请求地址组合为一个对象和一个方法,通过调用这个方法来调用接口:
/*查询接口*/ var config = {
"protocol":"http",
"server":"oliveche.com",
"virtualDirectory":"quiz/api.php"
}; var getBaseUrl = function(){
return config.protocol + "://" + config.server + "/" + config.virtualDirectory + "/";
}
最近在做一个笔记时,因为也是调用别人的接口,而产生了跨域,即使在本地更改了请求的域名或IP地址也不能直接使用 $.ajax({})中的get或post,会直接报跨域请求失败,解决的办法是使用 :$.ajaxSetup()
首先了解一下这个方法 $.ajaxSetup(),为所有 AJAX 请求设置默认 URL 和 success 函数,它的语法是:
jQuery.ajaxSetup( settings )
什么意思呢?settings 是一个对象,其中的每个属性表示需要更改默认设置的选项,而它的属性值表示更改后的默认值:
//需要更改的属性:更改后的默认值
key : value
下面是我使用$.ajaxSetup()的使用示例方法:
$(function(){
//查询方法
searchData();
}); function searchData(){
$.ajaxSetup({
url: getBaseUrl() + "Quiz.get", // 默认URL
type: "GET" , // 默认使用GET方式
success:function(result){ //result 是查询接口中返回的数据
//你的数据逻辑方法
},
error:function(){}
});
//这里调用$.ajax()方法时,已经被$.ajaxSetup中的属性 success 返回了正确的结果
$.ajax();
}
下面是官方文档中摘抄到的示例方法:
//设置AJAX的全局默认选项
$.ajaxSetup( {
url: "/index.html" , // 默认URL
aysnc: false , // 默认同步加载
type: "POST" , // 默认使用POST方式
headers: { // 默认添加请求头
"Author": "CodePlayer" ,
"Powered-By": "CodePlayer"
} ,
error: function(jqXHR, textStatus, errorMsg){ // 出错时默认的处理函数
// jqXHR 是经过jQuery封装的XMLHttpRequest对象
// textStatus 可能为: null、"timeout"、"error"、"abort"或"parsererror"
// errorMsg 可能为: "Not Found"、"Internal Server Error"等 // 提示形如:发送AJAX请求到"/index.html"时出错[404]:Not Found
alert( '发送AJAX请求到"' + this.url + '"时出错[' + jqXHR.status + ']:' + errorMsg );
}
} ); // 未设置任何参数,但url、async、type、headers、error等参数的默认值均已被$.ajaxSetup()更改(如上)
$.ajax( ); // 设置了url、type、success、error,就使用自己设置的参数值
// 但async、headers等参数的默认值已被$.ajaxSetup()更改
$.ajax( {
url: "myurl.php?action=list" ,
type: "GET" ,
success: function( data, textStatus, jqXHR ){
alert("返回数据:" + data);
} ,
error: function(jqXHR, textStatus, errorMsg){
alert("自己的error!");
}
}); // 上述$.ajaxSetup()的默认设置对$.get()、$.post()、load()、$.getJSON()、$.getScript()等AJAX函数也生效
// 因为这些函数也是在内部调用$.ajax()函数来实现的,只不过它们在内部都设置了一些参数 // $.get()在内部调用$.ajax()时已设置type为"GET",因此仍然使用GET方式。
// 但url、async、headers、error等参数的默认值已被$.ajaxSetup()更改
$.get( ); // $.post()在内部调用$.ajax()时已设置type为"POST",因此仍然使用POST方式。
// url也被设置为"user/action.php?method=addUser"
// 但async、headers、error等参数的默认值已被$.ajaxSetup()更改
$.post( "user/action.php?method=addUser" );
总之,我们的目的是在使用$.ajax({})时不管使用get还是post,接口中的数据是不存在跨域的就OK。
需要注意的是用$.ajaxSetup函数所设置的默认值不会应用到load()命令上。对于实用工具函数,如$.get()和$.post(),其HTTP方法不会因为使用这些默认值而被覆盖。设置GET的默认类型不会导致$.post()使用HTTP的GET方法。
<script type="text/javascript">
$().ready(function () {
var show = $('#show');
$('#selectNum').change(function () {
var idValue = $(this).val();
$.get('Server.aspx', { id: idValue }, function (data) { show.append(data+'<br/>'); });
}); $.ajaxSetup({
timeout: 3000,
dataType: 'html',
//请求成功后触发
success: function (data) { show.append('success invoke!' + data + '<br/>'); },
//请求失败遇到异常触发
error: function (xhr, status, e) { show.append('error invoke! status:' + status+'<br/>'); },
//完成请求后触发。即在success或error触发后触发
complete: function (xhr, status) { show.append('complete invoke! status:' + status+'<br/>'); },
//发送请求前触发
beforeSend: function (xhr) {
//可以设置自定义标头
xhr.setRequestHeader('Content-Type', 'application/xml;charset=utf-8');
show.append('beforeSend invoke!' +'<br/>');
},
})
})
</script>
跨域调用接口的方法之一:$.ajaxSetup()的更多相关文章
- 配置nginx反向代理服务器,解决浏览器跨域调用接口的限制问题
配置nginx反向代理服务器,解决浏览器跨域调用接口的限制问题 - 大venn的博客 - CSDN博客https://blog.csdn.net/u011135260/article/details/ ...
- 调用ajax 跨域调用接口
//ajax 跨域请求数据 function ajaxType (){ $.ajax({ url: "http://127.0.0.1:9090/spring_mvc/HttpClient/ ...
- 搭建nginx代理,为前端页面跨域调用接口
前端同学因开发需要,本地搭建的服务需要调用其它域名的接口,在帮助正确配置后,已能正常使用. 这里写一篇博客,记录一下. 前端页面地址为127.0.0.1:9813/a.html 接口地址http:// ...
- 跨域调用接口——WebClient通过get和post请求api
AJAX不可以实现跨域请求,经过特殊处理才行.一般后台可以通过WebClient实现跨域请求~ //get 请求 string url = string.Format("htt ...
- Thinkphp5.1允许uni-app的H5跨域请求接口解决方法
情景: uni-app使用vue框架开发混合APP,虽然APP或者小程序没有跨域,但希望就是写完这个既有H5,又有APP,小程序等,所以能通过后端解决跨域最好.但是不知道是vue的原因还是什么,在PH ...
- iframe 跨域调用父级方法的方案
一.如果高层域名相同的话,可以通过document.domain来实现跨域访问 例如: 父级域名:localhost:8080 子级域名:localhost:9090 那么可以设置document.d ...
- jquery Ajax跨域调用WebServices方法
由于公司需要开发一个手机页面,想提供给同事直接在手机上可以查询SAP资料.数据需要使用js调用webserver来获取. 因为初次使用Jquery调用Webserver,所以期间并不顺利.测试调用We ...
- jquery中的jsonp跨域调用(接口)
jquery jsonp跨域调用接口
- ajax——CORS跨域调用REST API 的常见问题以及前后端的设置
RESTful架构是目前比较流行的一种互联网软件架构,在此架构之下的浏览器前端和手机端能共用后端接口. 但是涉及到js跨域调用接口总是很头疼,下边就跟着chrome的报错信息一起来解决一下. 假设:前 ...
随机推荐
- mac Navicat 破解+汉化(亲测可用)
Navicat Premium 12 的版本 破解太麻烦,最后选择 Navicat Premium 11.0.16 下载:地址 提取码:h3rq ps:用的是功能,不是版本 为了一次就成功,请先执行下 ...
- Python3 模块 -- Fabric自动化模版
安装 pip3 install fabric3 创建软连接 find / -type f -name "fab" /usr/local/python3/bin/fab ln -s ...
- Day2----Python学习之路笔记(2)
学习路线: Day1 Day2 Day3 Day4 Day5 ...待续 一.简单回顾一下昨天的内容 1. 昨天了解到了一些编码的知识 1.1. 我们写好的.py文件头没有加# -*- coding: ...
- Salesforce Sales Cloud 零基础学习(二) Account 和 Contact
上一篇我们讲了Sales Cloud 中关于一个公司的产品和定价手册的概念,产品需要卖给企业客户(包括渠道伙伴以及合作伙伴等等)或者是个人客户,那客户信息存在哪里?针对企业客户,通过谁去串联起和企业客 ...
- java为什么用咖啡?
2000年度的JavaOne国际会议大厅热闹非凡,一阵阵浓郁的咖啡味儿香气扑鼻.从世界各地汇集到旧金山参加会议的Java精英们兴奋异常,排着长队,等待得到一杯由Java语言控制的咖啡机煮制的免费咖啡. ...
- Yaml 文件中Condition If- else 判断的问题
在做项目的CI/ CD 时,难免会用到 Travis.CI 和 AppVeyor 以及 CodeCov 来判断测试的覆盖率,今天突然遇到了一个问题,就是我需要在每次做测试的时候判断是否存在一个环境变量 ...
- spark之scala程序开发(集群运行模式):单词出现次数统计
准备工作: 将运行Scala-Eclipse的机器节点(CloudDeskTop)内存调整至4G,因为需要在该节点上跑本地(local)Spark程序,本地Spark程序会启动Worker进程耗用大量 ...
- JS脚本获取URL参数并调用
首先增加一个脚本库,可以是Zepto或者jQuery的,然后获取之后使用switch进行分流处理 <script type="text/javascript" src=&qu ...
- [转]玩转Angular2(4)--制作左侧自动定位菜单
本文转自:https://godbasin.github.io/2017/06/02/angular2-free-4-create-sidebar/ 因为项目原因又玩上了Angular2(v4.0+) ...
- [转]PHP时区/MySql时区/Linux时区
本文转自:https://blog.csdn.net/watermelonmk/article/details/82669062 问题背景:手头上有个国外的项目,为了所谓的国际化,得将时区修改至[美国 ...