• 关于

    get实现ajax

    的搜索结果

问题

SSH框架下AJAX问题

a123456678 2019-12-01 20:21:38 720 浏览量 回答数 1

问题

Jquery AJAX如何使用Promise/Deferred实现顺序执行?

小旋风柴进 2019-12-01 19:30:56 1910 浏览量 回答数 1

问题

ssh 框架下ajas 求解!

爵霸 2019-12-01 20:06:21 994 浏览量 回答数 1

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

学生动手场景应用,快速了解并掌握云服务器的各种新奇玩法!

回答

?? 是ajax啊    网络请求不一定有这个头的  楼主先多了解了解ajax和http网络原理吧######这个头不过是网络请求库自己添加的而已 不同的网络请求库实现不一样 楼主自己用xmlhttprequest封装一个库就知道了######就算用了这两个框架 网络请求也是通过ajax的啊 使用框架的话另外一种情况 就是做了缓存 这样别说是请求头了 连网络请求也没有######angularjs 或者 vue js 即可######证明他们不是用的$.get  $.post  $.ajax。######不是$.get $.post $.ajax就没有 这个请求头吗? $load()也有呢。######特意去看了下,确实是ajax分页,没问题######angularjs 或者 vue js 即可######嗯,是ajax分页,AJAX出来的请求不是应该有X-Requested-With:XMLHttpRequest请求头儿么?

kun坤 2020-05-30 16:14:59 0 浏览量 回答数 0

回答

Jquery里的POST和GET都是对ajax方法的封装,你可以自己进行封装。$.ajax({ url: 'www.website.com', type: 'DELETE', data: {} });执行后就会有Request Method:DELETE的http头被传到后端。OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE都是可以使用的Http1.1(连IE7都支持,其他浏览器不可能不支持)。至于你说的实现问题,我认为不存在,只是你服务端有没有做相应的处理,HTTP是协议不是技术。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。W3C有明确的说明。http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

小旋风柴进 2019-12-02 02:22:00 0 浏览量 回答数 0

问题

在web前端怎么发送http协议的put delete请求?用于restful API

杨冬芳 2019-12-01 20:06:45 2337 浏览量 回答数 4

问题

Ajax返回值写入HTML里?

小旋风柴进 2019-12-01 20:22:28 1082 浏览量 回答数 1

问题

基于Apache Nutch和Htmlunit的扩展实现AJAX页面爬虫抓取解析插件 请求报错

kun坤 2020-05-28 16:03:29 4 浏览量 回答数 1

回答

这个问题太开放了:可以一样,也可以不一样,全在开发者。 为什么说不知道呢?因为 HTTP 的规格没有说,所以,只能看如何实现了。 可以试着问这样的问题: 用 chrome 浏览器发送 get 请求,和用 IE 发送 get 请求时,此两者的请求头一样吗?答案是不一样。为什么?因为浏览器的实现方式不一样,他们的 User-Agent 值不一样。 用 ajax 发送 get 请求,直接在浏览器输入网址,用 form 发送 get 请求,此三者的请求头一样吗?我们使用相同的浏览器,所以 User-Agent 是一样的。 但是如果是用了 jQuery 框架,则不一样,jQuery 会增加 Origin、X-Requested-With:XMLHttpRequest 头。 X-Requested-With:XMLHttpRequest 是 jQuery 框架增加的 if ( !s.crossDomain && !headers["X-Requested-With"] ) { headers["X-Requested-With"] = "XMLHttpRequest"; }至于 Origin 这个应该是通过 XMLHttpRequest 发送请求时,由浏览器增加的。为的是防止跨域。 刚才我又测试了一下,使用 chrome 浏览器发送 ajax 请求,有 Origin 头。使用 firefox 则没有。说明 Origin 是 chrome 的 XMLHttpRequest 对象发送的。 综上所述,可以一样,也可以不一样,全在开发者。 开发者包括 浏览器开发者浏览器组件开发者,例如 XMLHttpRequest 对象类库开发者网站开发者你可以自己在应用中使用 js 添加请求头。

a123456678 2019-12-02 03:15:38 0 浏览量 回答数 0

回答

题外话:从前有个名词叫优雅降级。就是当你页面因为各种原因,不能用脚本的时候,可以使用form表单来实现降级处理。如今基本上用ajax来回调。用post get 都可以。只有参数的话可以用get来。如果涉及加密类信息,数据过长如图片信息的可以用post。

a123456678 2019-12-02 03:15:44 0 浏览量 回答数 0

回答

不仅仅是ajax,ajax只是异步通信方式,你用同步的方式也可以实现跨域。 所以和是不是ajax没毛线关系。 什么是跨域: 浏览器对于javascript的同源策略的限制,例如a.cn下面的js不能调用b.cn中的js,对象或数据(因为a.cn和b.cn是不同域),所以跨域就出现了. 上面提到的,同域的概念又是什么呢??? 简单的解释就是相同域名,端口相同,协议相同 jsonp: jsonp 全称是JSON with Padding,是为了解决跨域请求资源而产生的解决方案,是一种依靠开发人员创造出的一种非官方跨域数据交互协议。 一个是描述信息的格式,一个是信息传递双方约定的方法。 jsonp的产生: 1.AJAX直接请求普通文件存在跨域无权限访问的问题,不管是静态页面也好. 2.不过我们在调用js文件的时候又不受跨域影响,比如引入jquery框架的,或者是调用相片的时候 3.凡是拥有src这个属性的标签都可以跨域例如<script><img><iframe> 4.如果想通过纯web端跨域访问数据只有一种可能,那就是把远程服务器上的数据装进js格式的文件里. 5.而json又是一个轻量级的数据格式,还被js原生支持 6.为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback 参数给服务端, demo1:基于script标签实现跨域 举个例子:我在http://study.cn/json/jsonp/jsonp_2.html下请求一个远程的js文件 不通域的请求 被请求的数据,远程js的代码 这样就实现跨域成功了,因为服务端返回数据时会将这个callback参数(message)作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。 再写一个 Demo2: 基于script标签实现跨域 让远程js知道它应该调用的本地函数叫什么名字,只要服务端提供的js脚本是动态生成的就好了,这样前台只需要传一个callback参数过去告诉服务端,我需要XXX代码,于是服务端就会得到相应了. 例如 在http://study.cn/json/jsonp/jsonp_3.html页面请求 http://192.168.31.137/train/test/jsonpthree 上面说明了只要有src属性的都可以实现跨域请求,这个你应该清楚,当你引用某种js框架的时候不就是跨域了嘛,比如你引用谷歌juqery.js。 demo3:  基于jquery跨域 那么如何用jquery来实现我们的跨域呢???jquery已经把跨域封装到ajax上了,而且封装得非常的好,使用起来也特别方便 如果是一般的ajax请求: jsonp形式的ajax请求:并且通过get请求的方式传入参数,注意:跨域请求是只能是get请求不能使用post请求 jsonp 传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback) jsonpCallback 自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名 这里回调函数就是success 基本上就是这些了,还有iframe标签img标签,都可以,一个是描述信息的格式,一个是信息传递双方约定的方法。这个就算是跨域吧,跨域也就是只是一种格式。 答案来源网络,供参考,希望对您有帮助

问问小秘 2019-12-02 03:03:07 0 浏览量 回答数 0

回答

location.href等于向服务器发送get请求,且浏览器地址栏的url会更改。 简单的说,这就是一个超链接,除非你把表单的参数写入到链接里,否则表单内容无法通过get请求去发送到服务器的。 js很杂很乱,你说的方法能够实现,但是真心推荐对于按钮的处理全部使用ajax######回复 @SeizeMissing : 通过ajax post数据到后台更新,然后在success方法中执行跳转页面 这个跳转的页面通过controller查询出更新后的数据并在页面上显示######回复 @开源中国首席大弟子 : 就是点击这个按钮我会更新数据,然后在另外一个页面显示更新的数据######回复 @SeizeMissing : 没懂你什么意思 你点击按钮是要做什么事情的?######回复 @开源中国首席大弟子 : 这样的话,数据跟新咋办?######回复 @SeizeMissing : 通过ajax请求数据 在成功返回结果解析后再使用js跳转到其他页面

爱吃鱼的程序员 2020-06-05 13:11:31 0 浏览量 回答数 0

回答

需要使用http或者websocket进行沟通;http可以发起get和post请求,可以ajax,也可以正常提交;websocket可以建立长连接。具体看你们的业务怎么实现了。

云栖技术 2019-12-02 02:31:59 0 浏览量 回答数 0

问题

Web前台与后台交互(PHP)的问题,是不是除了post就是AJAX?

a123456678 2019-12-01 19:23:16 1409 浏览量 回答数 1

回答

你应该是点击按钮弹出一个小页面吧,相当于一个弹出框是不,如果是这样的话,你在那个小页面上添加完成一条数据之后点击确定按钮的时候,在js写一个方法,按钮去调用,方法里面用ajax对数据进行提交,跳入一个action中执行添加方法向数据库写值,如果添加的值没有问题,在完成insert方法之后,给一个返回值,然后js这个方法里面接收到这个返回值,比如成功返回“1”,失败返回“2”。 比如这样: var revalue = ajaxUtil.get(url, param); //下面是点击按钮会弹出的提示,revalue是ajax的返回值。你去看下ajax的实现方式就明白了if (revalue == "2") { alert("质检完成的任务不能再次下发!");return; } else{ alert("已分配给质检员的任务不能再分配!");return; }这样就会有提示了,希望对你有帮助。

蛮大人123 2019-12-02 01:50:08 0 浏览量 回答数 0

问题

AJAX如何实现PUT和DELETE方法

小旋风柴进 2019-12-01 19:28:05 1123 浏览量 回答数 1

回答

首先你要清楚 无论是ajax还是其他提交方式,无外乎2个元素 ,1:提交URL地址,2:formdata,ajax本质和form的get或post是没有任何区别的,那么,你模拟网页提交,需要从网页form页面取到相关的formdata,当然你也可以自己组合formdata,然后用requests的get或post方法,至于怎么用按钮提交,那就是2个问题了,1:你是用gui上的按钮触发提交,2:模拟点击页面的按钮提交,1就简单,信号槽有信号就直接提交了,2的话,你可以试试pyquery,它可以模拟JS操作页面######这不是很简单吗?urllib2  这个库不就可以吗?使用的是post/get  参数,http头得搞清楚,有没有鉴权也得搞清楚就Ok了。是现在不行,你贴一下log我给你写点代码片段。###### 1.Python的requests库是比较好的选择,或是urlib这种库,发送post或是get请求 2.selenium 来实现

爱吃鱼的程序员 2020-06-03 16:47:53 0 浏览量 回答数 0

问题

能否使用Jquery优化大量Ajax循环操作?

小旋风柴进 2019-12-01 19:24:01 742 浏览量 回答数 1

回答

function change() { var mark = document.getElementById('btn').innerText; if (mark == '关注') { document.getElementById('btn').innerText = "已关注"; } else { document.getElementById('btn').innerText = "关注"; } } <button id="btn" onclick="change()">关注</button> php 代码没写过,不过给你个思路吧 要实现关注你的接口肯定要首先写好,简单来说这个接口需要接收一个userid,即将被关注的那个用户的ID,控制器写好之后按照你的需求就是 ajax 调用了。这里来说两种情况,都可以 GET 请求 (如果你设计的url 为 /follow/ ) function change() { var mark = document.getElementById('btn').innerText; if (mark == '关注') { $.get('follow/<int: userid>', function(data) { //GET 请求这个url, 接口返回 data, 判断有没有关注成功来进行DOM操作 if (data == true) { document.getElementById('btn').innerText = "已关注"; } else { //失败了,自行处理吧 :) console.log('false'); } }) else { //取消关注,和关注差不多 } POST 请求 (如果你设计的url 为 /follow ) function change() { var mark = document.getElementById('btn').innerText; if (mark == '关注') { $.get('follow', {'userid': <int:userid>}, function(data) { //POST 提交`userid`请求这个url, 接口返回 data, 判断有没有关注成功来进行DOM操作 if (data == true) { document.getElementById('btn').innerText = "已关注"; } else { //失败了,自行处理吧 :) console.log('false'); } }) else { //取消关注,和关注差不多 } $.ajax() 别忘了引用 jquery。兼容性问题也要注意。

杨冬芳 2019-12-02 02:48:44 0 浏览量 回答数 0

回答

$("#Loading").before(txt); txt里大概就是图片的代码吧###### if (allstop == true) { $(window).scroll(function () {######你看不到他后台/ajax/casesList.ajax是如何实现的,这部分是服务器端,你通过网页看到的只是get请求,可以在调试的network部分看到请求方式。如果你想测试你可以尝试用命令行的curl去测试,但是你看不到服务器端的代码,因为他不是开源的###### 引用来自“剑心无痕”的评论 你看不到他后台/ajax/casesList.ajax是如何实现的,这部分是服务器端,你通过网页看到的只是get请求,可以在调试的network部分看到请求方式。如果你想测试你可以尝试用命令行的curl去测试,但是你看不到服务器端的代码,因为他不是开源的 我用f12观察了一下,其中XHR中默认是一个也没有,后来不断的加载,共有三个casesList.aspx 这种情况说明了什么呢? 还有一个问题,她似乎让显示的每一页只有24条记录,以后随着请求的加载,不断的输出后续的记录,如何使每一页保持24条记录呢,如何用sql来控制呢? ######还有忘记说了,后端源码是部署在服务器上,你是看不到的是安全的,前端的js,css,html都是开源的,是不安全的,所以操作数据库尽量不要用js######如果你想了解后段是如何实现的,可以稍微学习一些后段的知识,这里他是用asp.net写的后端,其实用js也可以写后端,不过目前主流的后端框架都是php,python,ruby,asp等的,我个人的理解,后段主要是做复杂的逻辑运算和数据库交互(数据库js也可以直接访问的),然后前后端之间的通信主要是两种,一种是这里的post,get等请求,一种是模板######$("#loading").before(txt);断点在这里的话,你可以看到txt就是有24个li标签的字符串,每次都会把txt添加到id是loading的前面,你看html里loading的前面其实就是li标签,所以实际上就是在现有li标签的末尾添加txt###### 引用来自“ziluopao”的评论 引用来自“剑心无痕”的评论 你看不到他后台/ajax/casesList.ajax是如何实现的,这部分是服务器端,你通过网页看到的只是get请求,可以在调试的network部分看到请求方式。如果你想测试你可以尝试用命令行的curl去测试,但是你看不到服务器端的代码,因为他不是开源的 我用f12观察了一下,其中XHR中默认是一个也没有,后来不断的加载,共有三个casesList.aspx 这种情况说明了什么呢? 还有一个问题,她似乎让显示的每一页只有24条记录,以后随着请求的加载,不断的输出后续的记录,如何使每一页保持24条记录呢,如何用sql来控制呢? 我又观察了一下f12,发现other选项中,有一个不断变化的动态页面,估计这个页面就是后端中的代码吧,当然它不是原码,但毕竟能看出变化来! 还有一个问题,下图中绿色箭头指的东西是不是代码中的,还是说f12强加上去便于解析呢? ######看上去有点像调用的baidu的api,具体的还得你自己去研究研究######手机上面看不到图片,电脑才看到你的图片,绿色箭头是请求的响应吧,headers里能看到请求的信息,估计是在某个地方调用的这个请求,具体可以在源码中搜索一下###### 我有点明白了,它是通过"pageIndex": pageIndex, "category_id": category_id和后端中的代码联系的,这两个参数在后端源码中肯定有######回复 @剑心无痕 : 是这样,我正好想请教你,他的代码怎么出现在百度商桥中了,这是玩的啥技术!?######是的,就是把这两个参数通过post传递到后端,然后获取后端返回的txt,还有刚才查了一下,貌似是百度商桥的api,有兴趣你可以自己查看一下###### 可不可以这样推理,他把代码写在百度商桥中是为了便于百度收录?我是这样想的,其实这种延迟加载技术不利于优化,似乎作者想通过百度商桥弥补一下,不知对不对,不过我真想不出这么做能弥补吗?###### 还有一个问题需要提出:后端如何一次输出五个格式为txt的li呢,只有这样ajax才能一下输出五个li来

爱吃鱼的程序员 2020-05-31 00:19:29 0 浏览量 回答数 0

问题

一个页面中多个ajax同时请求后台同一个跨域json方法会报错?报错

爱吃鱼的程序员 2020-06-09 11:45:07 0 浏览量 回答数 1

问题

Spring MVC 拼接json后,页面跳转并传json数据

杨冬芳 2019-12-01 20:17:19 2766 浏览量 回答数 1

问题

有多个参数想通过ajax传递给服务端,使用from标签还是用div等。

a123456678 2019-12-01 19:26:18 888 浏览量 回答数 1

回答

使用url重写技术。 可以变成xxx.com/user/userid/1 也可以变成xxx.com/user-userid-1 随便你怎么定都可以的 ###### 你看到这样的,是因为使用了GET请求,改成POST请求就好了。 ###### 引用来自“puras”的答案 你看到这样的,是因为使用了GET请求,改成POST请求就好了。 除了使用表单变成post还有其他方式吗 ######这个红薯应该知道###### @红薯###### 引用来自“shyar”的答案 引用来自“puras”的答案 你看到这样的,是因为使用了GET请求,改成POST请求就好了。 除了使用表单变成post还有其他方式吗 可以通过JS来模拟POST提交。 如果你不想让别人看到参数,使用POST是最好的办法。 如果只是因为有?号,看着别扭,那么一楼的方式就不错 ###### 引用来自“puras”的答案 引用来自“shyar”的答案 引用来自“puras”的答案 你看到这样的,是因为使用了GET请求,改成POST请求就好了。 除了使用表单变成post还有其他方式吗 可以通过JS来模拟POST提交。 如果你不想让别人看到参数,使用POST是最好的办法。 如果只是因为有?号,看着别扭,那么一楼的方式就不错 那用js怎么实现post提交呢,不是ajax,是直接跳转的那种 ###### 引用来自“shyar”的答案 引用来自“puras”的答案 引用来自“shyar”的答案 引用来自“puras”的答案 你看到这样的,是因为使用了GET请求,改成POST请求就好了。 除了使用表单变成post还有其他方式吗 可以通过JS来模拟POST提交。 如果你不想让别人看到参数,使用POST是最好的办法。 如果只是因为有?号,看着别扭,那么一楼的方式就不错 那用js怎么实现post提交呢,不是ajax,是直接跳转的那种 var form = $('<form method="post"></form>'); var param = '<input id="post" name="post" value="aaaaaaaa" type="hidden" />'; form.hide().append(param).appendTo('body'); form.attr('action', '/mk/post'); form.submit(); ###### 引用来自“puras”的答案 引用来自“shyar”的答案 引用来自“puras”的答案 引用来自“shyar”的答案 引用来自“puras”的答案 你看到这样的,是因为使用了GET请求,改成POST请求就好了。 除了使用表单变成post还有其他方式吗 可以通过JS来模拟POST提交。 如果你不想让别人看到参数,使用POST是最好的办法。 如果只是因为有?号,看着别扭,那么一楼的方式就不错 那用js怎么实现post提交呢,不是ajax,是直接跳转的那种 var form = $('<form method="post"></form>'); var param = '<input id="post" name="post" value="aaaaaaaa" type="hidden" />'; form.hide().append(param).appendTo('body'); form.attr('action', '/mk/post'); form.submit(); 还真的是即时构建form ######虽然可以,但是还是谢谢你######直接<input type="hidden" />  用js提交前赋个值不就OK了么。搞那么麻烦干什么。 ######放到cookie去吧,oscid 好像是这么干的。。。

爱吃鱼的程序员 2020-06-03 16:39:05 0 浏览量 回答数 0

问题

关于jquery pagelist无法传值的问题

吴孟桥 2019-12-01 19:36:28 781 浏览量 回答数 1

回答

也许var list = result.data;//获取合同列表这个前面要加一句,使result这个数据json化,也许result这个字符串确实像json格式,但是它还不是json。你再检查一下看看。 http://localhost:8080/Contract/eduwest/foundAll.form这个本身内容是JSON格式的么?如果已经显示list是undefined,说明你传输接受的数据应该就是有问题的吧。如果数据没问题,考虑以$.ajax({},"json");形式调用一下试试? 下载 java调用openamf实例,把取回的结果转换成list或bean. .下载 json2 ajax返回list处理 在jsp页面 遍历 .论坛 怎么用jQuery使用load函数访问Struts2中的Action得到返回结果是List .论坛 c#怎么解析不确定个数不确定名称的json?如下这种格式,我想把里面的多个日期key对应的数组全取出来转换成list .论坛 在线等高手 xfire 中list里面放自定义java bean 用get方法返回bean的值 结果是null 该怎么办啊 . caozhy 推荐了: 用递归能实现一个数组划分的算法么? .苏小喵 推荐了: 请问这是java中的设计模式吗? .shiter 推荐了: RHEL下跑应用,性能和调用CPU内核问题 .苏小喵 推荐了: 从Chat表中,如果UserType是父母,根据UserId 从Parent表中取出Name, .苏小喵 推荐了: 尝试引用已删除的函数??? . .

杨冬芳 2019-12-02 03:03:43 0 浏览量 回答数 0

回答

遇到这种问题,我的回答总是一样的: 别瞎JB折腾了,在后台自己封装一次,然后在同一个域名之下调用吧! ######少了一个callback参数,并且服务返回的内容必须是callback包的###### 看下我的这个例子,我当初模仿京东和淘宝做单点登录,跨域问题处理 <script>varsuccess_count=0;varerror_count=0;$.ajax({type:"get",dataType:"jsonp",url:"http://sso:8080/getAllDomain?callback=?",crossDomain:true,success:function(domains){if(domains){$.each(domains,function(){$.ajax({type:"get",dataType:"jsonp",url:this,crossDomain:true,success:function(data){success_count++;console.log("success");},error:function(){error_count++;}});})}}});</script> 这是后端 @RequestMapping("getExitAllDomain")publicvoidgetExitAllDomain(HttpServletRequesthttpServletRequest,HttpServletResponsehttpServletResponse){List<String>allDomain=newArrayList<String>();allDomain.add("http://sso:8080/delCookie?t=a:8080&callback=?");allDomain.add("http://sso:8080/delCookie?t=b:8080&callback=?");allDomain.add("http://sso:8080/delCookie?t=c:8080&callback=?");allDomain.add("http://sso:8080/delCookie?t=d:8080&callback=?");PrintWriterout=null;try{out=httpServletResponse.getWriter();}catch(IOExceptione){e.printStackTrace();}Stringcallback=httpServletRequest.getParameter("callback");out.println(callback+String.format("(%s);",JSON.toJSONString(allDomain)));}  ######如果用jsonp看下服务器返回的是不是回调函数类型,跨域建议使用cors###### 别人说设置jsonp是说在jquery的ajax方法的时候,你封装的那个不知道...###### 在jQuery的ajax方法下用jsonp,你那个封装方法虽然看起来差不多但是具体里面对跨域的处理不知道写了什么,只能自己另外做处理###### 先研究一下jsonp的实现方法再用###### 可以看我的这篇,https://my.oschina.net/tp123/blog/1506646 希望对你有帮助###### 解决了###### Stringorigin=request.getHeader( "Origin") ; if(StringUtils. isNotBlank(origin)){response.setHeader( "Access-Control-Allow-Origin" ,origin) ; //允许访问的域 response.setHeader( "Access-Control-Allow-Methods" , "POST,GET") ; //允许GET、POST的外域请求 response.setHeader( "Access-Control-Allow-Credentials" , "true") ; //允许请求带cookie到服务器 response.setContentType( "application/json;charset=utf-8") ; //设定JSON格式标准输出、及编码}

优选2 2020-06-09 15:44:15 0 浏览量 回答数 0

回答

遇到这种问题,我的回答总是一样的: 别瞎 JB 折腾了,在后台自己封装一次,然后在同一个域名之下调用吧! ######少了一个callback参数,并且服务返回的内容必须是callback包的###### 看下我的这个例子,我当初模仿京东和淘宝做单点登录,跨域问题处理 <script> var success_count = 0; var error_count = 0; $.ajax({ type: "get", dataType: "jsonp", url: "http://sso:8080/getAllDomain?callback=?", crossDomain: true, success: function (domains) { if (domains) { $.each(domains, function () { $.ajax({ type: "get", dataType: "jsonp", url: this, crossDomain: true, success: function (data) { success_count++; console.log("success"); }, error: function () { error_count++; } }); }) } } }); </script> 这是后端 @RequestMapping("getExitAllDomain") public void getExitAllDomain(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { List<String> allDomain = new ArrayList<String>(); allDomain.add("http://sso:8080/delCookie?t=a:8080&callback=?"); allDomain.add("http://sso:8080/delCookie?t=b:8080&callback=?"); allDomain.add("http://sso:8080/delCookie?t=c:8080&callback=?"); allDomain.add("http://sso:8080/delCookie?t=d:8080&callback=?"); PrintWriter out = null; try { out = httpServletResponse.getWriter(); } catch (IOException e) { e.printStackTrace(); } String callback = httpServletRequest.getParameter("callback"); out.println(callback + String.format("(%s);", JSON.toJSONString(allDomain))); }  ######如果用jsonp看下服务器返回的是不是回调函数类型,跨域建议使用cors###### 别人说设置jsonp是说在jquery的 ajax方法的时候,你封装的那个不知道...###### 在jQuery的ajax方法下用jsonp,你那个封装方法虽然看起来差不多但是具体里面对跨域的处理不知道写了什么,只能自己另外做处理###### 先研究一下jsonp的实现方法再用###### 可以看我的这篇,https://my.oschina.net/tp123/blog/1506646  希望对你有帮助###### 解决了###### String origin = request.getHeader("Origin"); if(StringUtils.isNotBlank(origin)){ response.setHeader("Access-Control-Allow-Origin", origin); // 允许访问的域 response.setHeader("Access-Control-Allow-Methods", "POST,GET");// 允许GET、POST的外域请求 response.setHeader("Access-Control-Allow-Credentials", "true"); // 允许请求带cookie到服务器 response.setContentType("application/json; charset=utf-8"); // 设定JSON格式标准输出、及编码 }

爱吃鱼的程序员 2020-05-31 13:06:55 0 浏览量 回答数 0

问题

【精品问答】前端开发必懂之JS技术二百问

茶什i 2019-12-01 22:05:04 146 浏览量 回答数 0

回答

1、jsonp必须遵循一个固定的格式。即请求的URL的search中必须存在一个jsonpcallback=functionName;响应的格式为functionName(/ json data /); 原理就是利用script不受同源策略限制的特点。2、在server返回数据之后,尽量删掉这个script。因为页面中有n多个jsonp,就会有n多个生成的script标签。造成dom臃肿。并且别人也可以通过观察html来指导你jsonp的请求细节。3、是看重写的mimeType是不是和server返回的一样。如果一样就没必要重写mimeType了。除此之外还用了setRequestHeader、overriderMimeType、abort等方法。4、看代码流程即可。我写了一个简单点的例子 (function (global) { // 防止低版本ie里,undefined被重写 var undefined = void(0); // 定义命名空间 var namespace = {}; // 默认的参数列表 var defaultOptions = { // ajax请求的路径是什么 url: '', // 往服务器发送的数据 data: '', // 使用什么http方法 type: 'get', // ajax请求方式,同步还是异步。默认为异步 async: true, // 成功时执行的函数 success: function (data) { }, // 失败时执行的函数 error: function (errInfo) { }, // 自定义请求首部列表 header: {}, // 重写的mimeType overrideMimeType: '', // 是否走缓存 cache: false, // 超时毫秒数。默认为0 表示不执行超时逻辑 timeout: 0, // 是否格式化参数为uri string processData: true, // 请求的mime类型 默认为表单提交 contentType: 'application/x-www-form-urlencoded', // 返回的数据格式 text|json dataType: 'text' }; /** * CORE * @param {Object} options 用户输入的参数 * @throw TypeError */ var ajax = function (options) { // 判断参数是否为对象,如果不是则抛出类型错误 if (!tool.isObject(options)) { throw new TypeError('参数类型错误'); } // 合并用户输入的参数列表和默认的参数列表 返回一个全新的参数列表对象 var userOptions = tool.extend(defaultOptions, options); // ajax第一步:获取ajax对象 var xhr = tool.getXHR(); // 1、如果是get系 需要把data拼接到url后面 if (/^(get|delete|head)$/img.test(userOptions.type)) { var data = tool.encodeToURIString(userOptions.data); userOptions.url = tool.hasSearch(userOptions.url, data); // 因为get系不需要传send参数,所以设置为null userOptions.data = null; } // 2、是否走缓存,如果不走缓存则在url后面加一个随机数来防止缓存 if (userOptions.cache === false) { // 因为search是有固定格式的 key=value 如果只写一个value是不合法的,所以必须构造一个key,而且这个key不能和已有的key重复 var random = '_=' + (Math.random() * 0xffffff).toFixed(0); userOptions.url = tool.hasSearch(userOptions.url, random); } // ajax操作第二步 xhr.open(userOptions.type, userOptions.url, userOptions.async); // 2.1 设置自定义请求首部信息 if (userOptions.header && tool.isObject(userOptions.header)) { tool.eachObject(userOptions.header, function (key, value) { xhr.setRequestHeader(key, value); }) } // 2.2 设置content-type http里表现mimeType的字段就是content-type // 设置请求的mimeType if (userOptions.contentType && tool.isString(userOptions.contentType)) { xhr.setRequestHeader('content-type', userOptions.contentType); } // 2.3 设置重写的mime类型 // 设置响应的mimeType if (userOptions.overrideMimeType && tool.isString(userOptions.overrideMimeType)) { xhr.overrideMimeType(userOptions.overrideMimeType); } // 2.4 判断是否执行超时逻辑 if (tool.isNumber(userOptions.timeout) && userOptions.timeout > 0) { xhr.timeout = userOptions.timeout; // 标准浏览器 if ('ontimeout' in xhr) { xhr.ontimeout = function () { userOptions.error('timeout'); } } else { // 低版本ie setTimeout(function () { // http的事务是否还没有完成 if (xhr.readyState !== 4) { // 强制终止http事务 xhr.abort(); } }, xhr.timeout); } } // 2.5 是否需要处理给服务器发送的数据,判断processData是否为true // 当给服务器发送的数据为二进制或者formData的时候,不需要处理这个数据 // 要把processData设置为false if (/^(post|put)$/igm.test(userOptions.type) && userOptions.processData === true) { userOptions.data = tool.encodeToURIString(userOptions.data); } // ajax第三步:接收响应 xhr.onreadystatechange = function () { // http的事务是否完成 if (xhr.readyState === 4) { // 获取响应主体 var responseText = xhr.responseText; // 判断状态码是否成功 if (/^2\d{2}$/.test(xhr.status)) { // 判断是否需要把响应主体格式化为json对象 if (userOptions.dataType === 'json') { // 因为不合法的json字符串无法转换为json对象,会出异常 try { responseText = tool.JSONParse(responseText); } catch (ex) { userOptions.error(ex); return; } } userOptions.success(responseText); // R如果响应码是错误的类型 } else if (/^(4|5)\d{2}$/.test(xhr.status)) { // 直接执行error userOptions.error(xhr.status); } } }; // ajax第四步:发送 xhr.send(userOptions.data); }; /** * 利用闭包,实现获取数据类型 * @param {string} type 数据类型 * @returns {Function} */ var getType = function (type) { return function (obj) { // 为什么要用Object.prototype.toString来判断类型? return Object.prototype.toString.call(obj) === '[object ' + type + ']'; } }; var tool = { /** * 利用惰性函数,实现获取ajax对象的方法 */ getXHR: (function () { var list = [function () { return new XMLHttpRequest; }, function () { return new ActiveXObject('Microsoft.XMLHTTP'); }, function () { return new ActiveXObject("Msxml2.XMLHTTP"); }, function () { return new ActiveXObject("Msxml3.XMLHTTP"); }]; var len = list.length; var xhr = null; while (len--) { try { list[len](); xhr = list[len]; break; } catch (ex) { continue; } } if (xhr !== null) { return xhr; } throw new Error('当前浏览器不支持此方法'); })(), /** * 合并多个对象 * @returns {{}} 合并后的对象 */ extend: function () { // 因为参数长度不固定,所以把参数列表转成数组 // var params = [].slice.call(arguments, 0); var voidObj = {}; this.each(arguments, function (item) { // item为每一个参数对象 tool.eachObject(item, function (key, value) { voidObj[key] = value; }); }); return voidObj; }, /** * 循环帮助函数,利用惰性函数 */ each: (function () { if ([].forEach) { return function (list, callback, context) { [].forEach.call(list, callback, context); } } return function (list, callback, context) { for (var i = 0, j = list.length; i < j; i++) { callback.call(context, list[i], i, list); } } })(), /** * 循环对象 * @param {Object} obj 要循环的对象 * @param {Function} callback 回调函数 * @param {Object|undefined} context 回调函数里头的上下文对象 */ eachObject: function (obj, callback, context) { for (var n in obj) { if (!obj.hasOwnProperty(n)) continue; callback.call(context, n, obj[n]); } }, /** * 给tool动态添加判断数据类型的方法 */ init: function () { this.each(['Object', 'Function', 'Array', 'String', 'Number'], function (item) { tool['is' + item] = getType(item); }) }, /** * 把一个对象格式化为uri string * @param {*} data 需要格式化的数据 * @return {string} 格式化之后得到的uri string */ encodeToURIString: function (data) { if (this.isString(data)) return data; if (!this.isObject(data)) return ''; var arr = []; this.eachObject(data, function (key, value) { arr.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)); }); return arr.join('&'); }, /** * 往url后面拼接参数的方法 * @param {string} url url * @param {string} padString 要拼接的参数 * @returns {string} 拼接之后的url */ hasSearch: function (url, padString) { if (!padString) return url; // 如果有问号,说明url里已经有参数了,因为参数和参数之间用&来分隔 /*if (/\?/.test(url)) { return url + '&' + padString; } else { return url + '?' + padString; }*/ return url + (/\?/.test(url) ? '&' : '?') + padString; }, /** * 把json字符串格式化为json对象 * @param {string} jsonString json字符串 * @return {Object} json对象 */ JSONParse: function (jsonString) { if (window.JSON) { return JSON.parse(jsonString) } return eval('(' + jsonString + ')'); } }; tool.init(); // 把ajax方法放入命名空间中 namespace.ajax = ajax; tool.each(['get', 'post'], function (item) { /** * 动态添加get和post方法 * @param {string} url 请求的url * @param {Object} data 往服务器发送的数据 * @param {Function} callback 成功的回调函数 * @param {string} dataType 数据格式 */ namespace[item] = function (url, data, callback, dataType) { ajax({ url: url, type: item, data: data, success: callback, dataType: dataType }); } }); // 先把全局里已经存在的x先放到一边 var globalX = global.x; /** * 解决全局变量名冲突 * @param {string|undefined} symbol 更改的全局变量名 * @returns {Object} */ namespace.noConflict = function (symbol) { if (symbol && tool.isString(symbol)) { window[symbol] = namespace; } global!==undefined&&(window.x = globalX); return namespace; }; // 暴露到全局环境中 global.x = namespace; })(this); 用法和jquery的一样。不过我暴露的是x变量,不是$.

小旋风柴进 2019-12-02 02:28:33 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板