php怎么返回json,php怎么接收前端传来的json数据?
会jquery吗,可以先从jquery的ajax入手,会比较简单。ajax写在js脚本里,一般是获取表单的数据(value)然后传到php脚本进行处理,再接受返回的数据。jquery的写法是这样的:js脚本
type是传值的方式,有get和post,php脚本里取值语句也要用对应的方式。url后面的参数是将数据传递到你想要的php脚本路径,这里是相对路径。data是你要传递的数据,一般从表单中娶过来后写成json的形式传递。 datatype是获取数据的格式,success是传递成功后的反馈或者使用接收回来的数据,这里的data参数是php处理后的(你想要的)数据,php那边对应的是echo后面的东西。php脚本:index.php前面两句是取传过来的数据,分别对应了ajax里data的数值,第三句是一个简单的数据处理。最后php脚本的输出值就是echo语句后面的内容,并返回给js脚本里success的function的参数data。有没有人通过自学某种技能而找到一份工作或者兼职?
这个热闹我来凑一下,我想告诉大家,只要你有股韌劲,能下狠心,想学一种技能,就算你已六十岁,也是绝对没有问题的!说说我六十岁以后学习抖空竹并获得教练资格的经历,你会觉得世间其实一切皆有可能。
我1947年生人,2007年底初学抖空竹,可能因为是老北京人的缘固,一下子被这项中国传统的民间体育运动深深吸引,很快便到了痴迷的程度。从学习双轮抖法的六个基本功开始,我坚持系统训练,克服了练习过程中的枯燥乏味,为的是打下坚实的基础。在老师的严格指导下,很快进入了状态,找到了感觉,掌握了运动中的动作要领,很快就繁简交叉,难易结合地练起了各种花式动作。
那一年,我已六十周岁,为了学习抖空竹,我坚持每天早起天不亮就到达公园训练场地,整个团队我差不多总是第一个到来,三个小时的训练从不停歇偷懒,真正做到了冬练三九,夏练三伏,那份执着,那份激情终于让我练就了一身抖空竹绝技,并于四年后经严格考试,获得由国家体育总局颁发的二级社会体育指导员资格证书,开启了我去学校做一名外聘兴趣课教师的美丽人生。
这一干就是七 八年,直到去年疫情开始,才结束了这一份我十分挚爱珍惜的工作。其间,不仅被各中小学校聘用,还为一些学校的体育老师做有偿培训,并在大洋彼岸的美国开了班进行传播教授,使我们这一项国家级非物质文化遗产得以走出国门,得到了更加广泛的传承和推广。
当然,这也为我带来了一份除退休工资以外的额外收入,一边干着自己喜欢的工作,一边还挣钱,忘了年龄,增强了体质,心里真的特别美!
请问怎么单机架设传奇服务端我想自己开个传奇玩下?
如果什么服务端经验都没有的话,建议上 HTTP,用 PHP 来写HTTP是请求-应答试的,也就是你:登录,提交战斗结果,请求排行榜 之类的动作都是提交 HTTP 请求到 PHP程序。然后客户端20秒轮询一次服务端,问服务端有没有什么消息给我,比如双人聊天消息。如果取到消息,就把下一次轮训时间改短,比如5秒,再取到消息,继续改短,比如2秒,如果没消息就慢慢放长周期,比如:2秒,3秒,5秒,7秒,10秒,15秒,20秒直到有消息了,又再次把周期变短。服务端和客户端之间数据通信用 json,请求就是一个 json 对象过去,php处理,结束后返回一个json回来,客户端收到后跳转到具体处理代码。调试的话服务端客户端可以分开调试,HTTP调试比较简单,直接浏览器或者 wget/fetch 都可以调试。iOS下面我记得有提供 HTTP 访问的各种现成框架,直接使用就得了。选PHP是因为学习周期最短,部署最简单,windows下的话,直接使用:WampServer, la plate-forme de développement Web sous Windows来部署,Wamp 一安装,直接自带:apache+php+mysql,
如何解决跨域问题?
现在开发项目,大部分公司采用的都是前后端分离的方式进行开发,由于现在产品形态越来越多,网页、手机端、桌面端等等,为了面对各种端,数据中心化、微服务概念的出现,我们为了集成这些服务,不得不去面对一个常见的问题——解决跨域请求的问题。
以前工作开发中,经常会有这样的问题,前端工程师的前端页面由于跨域问题报错了,来协调后端开发人员解决,后台开发人员还那解释你来看我这边的接口是正常的,应该是你的问题,这是前端开发人员的心顿时是崩塌的,如果你还不知道怎么办的时候,也许会默默的自己去寻找解决方案,一查解决方案,这个工作应该需要前后台一起配合,你还得给后端开发人员去好说歹说,让他们也看看一起解决。我很能理解作为前端的我们真是不容易啊。
关于跨域这个问题,不仅前端工程师需要了解,后端工程师也需要了解更应该重视,因为后面会提及到相关的解决方案,需要共同配合才能完成。借着回答这个问题的机会,我来把跨域的相关内容进行系统的梳理,分享给大家。
什么是跨域跨域(CORS)——跨源资源共享。换成我们前端开发人员能理解的就是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript的实施的安全限制。
换个通俗的比方来说,比如经常会有一些模仿金融机构的钓鱼网站,用了和金融机构类似的域名,你点击进去一看,竟然和你熟悉的金融网站一模一样,如果你没注意域名的差别,如果你在网站上输入了卡号和密码信息那就很危险了,有可能这个网站是frame了金融机构的网站,如果金融网站没有做相关的安全限制,你的信息完全有可能被非法分子获取。由此可见浏览器的同源策略存在是十分有必要的。
我顺便在给大家介绍下如何区分是否是同源,所谓的同源是指,域名,协议,端口均为相同。接下来举几个示例,方便大家进行理解:
常用方法一:使用 JSONP 进行 Get 请求这应该是我们接触到的第一个解决跨域的方法,笔者记得前端入门经典红皮书里有过介绍,JSONP有两部分主成:回调函数和数据。回调函数是当响应完成在页面中调用的函数,回调函数的名字一般在请求中进行制定。而数据就是传入回调函调函数中的JSON数据。为了解释这个,还是我们来看下面这个例子吧:
比如我们来实现一个获取当地天气数据的功能,我们需要在后端与天气接口平台交互获取天气数据,前端页面通过GET后端API的方式获取天气信息。
1、首先定义我们前端页面的回调函数功能,我们定义了一个gotWeather的函数:
2、接下来定义请求方法,请注意callback后面的参数和回调函数保持一致的名字:
3、我们后台接口最终要返回非类似这样的数据内容:
你会发现,数据能够正常返回,你也许会问为什么这样可以,不违背同源原则吗?其实之所以有效,并且不违反安全性,因为这是经过前后端共同协作,约定以这种方式传递数据。但是你会发现使用这种方法会有一个问题是,只能用于Get请求。
常用方法二:跨域资源共享(CORS)请求方式目前这种方式用的比较多,应用比较广泛,如果你的项目受部署环境限制的话,建议还是用这种。
1、什么是CORS?
CORS是一个W3C标准,全称是“跨域资源共享”(跨源资源共享)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
CORS需要浏览器和服务器同时支持目前,所有浏览器都支持该功能,IE浏览器不能低于IE10.IE8 +:IE8 / 9需要使用XDomainRequest对象来支持CORS。
整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。
CORS 请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。
2、什么是简单请求?
2.1、首先介绍下什么是简单请求,请求方法是以下请求方法:
Head
Get
Post
2.2、HTTP 的头信息不超出以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
凡是不同时满足上面两个条件,就属于非简单请求。一句话,简单请求就是简单的 HTTP 方法与简单的 HTTP 头信息的结合。
2.2、简单请求的大致流程我做下解释:
加入我们的一个网站页面地址需要去请求一个服务端的API,这个页面的请求头可能是这样的:
上面的头信息中,Origin字段用来说明,本次请求来自哪个域(协议 + 域名 + 端口)。服务器根据这个值,决定是否同意这次请求。
如果Origin指定的源,不在许可范围内,服务器会返回一个正常的 HTTP 回应。浏览器发现,这个回应的头信息没有包含Access-Control-Allow-Origin字段,就知道出错了,从而抛出一个错误,被XMLHttpRequest的onerror回调函数捕获。注意,这种错误无法通过状态码识别,因为 HTTP 回应的状态码有可能是200。
如果Origin指定的域名在许可范围内,服务器返回的响应,会多出几个头信息字段。具体的请求交互流程如下图所示:
如果一切顺利正常的话,你就会看到服务端一些返回的头信息
3、什么是非简单请求
3.1、 简单的介绍下什么是非简单请求(not-so-simple request)
非简单请求是那种对服务器提出特殊要求的请求,比如请求方法是PUT或DELETE,或者Content-Type字段的类型是application/json。
非简单请求的 CORS 请求,会在正式通信之前,增加一次 HTTP 查询请求,称为“预检”请求(preflight)。浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些 HTTP 动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。这是为了防止这些新增的请求,对传统的没有 CORS 支持的服务器形成压力,给服务器一个提前拒绝的机会,这样可以防止服务器大量收到DELETE和PUT请求,这些传统的表单不可能跨域发出的请求。
3.2、通过示例,我们来了解其实现的原理
3.2.1、比如我们在前端页面的请求代码时这样的如下所示:
上面代码中,HTTP 请求的方法是PUT,并且发送一个自定义头信息X-Custom-Header。
3.2.2、浏览器发现,这是一个非简单请求,就自动发出一个“预检”请求,要求服务器确认可以这样请求。下面是这个“预检”请求的 HTTP 头信息。
“预检”请求用的请求方法是OPTIONS,表示这个请求是用来询问的。头信息里面,关键字段是Origin,表示请求来自哪个源。
除了Origin字段,“预检”请求的头信息包括两个特殊字段。
(1)Access-Control-Request-Method 该字段是必须的,用来列出浏览器的 CORS 请求会用到哪些 HTTP 方法,上例是PUT。
(2)Access-Control-Request-Headers 该字段是一个逗号分隔的字符串,指定浏览器 CORS 请求会额外发送的头信息字段,上例是X-Custom-Header。
3.3、服务器收到“预检”请求以后,检查了Origin、Access-Control-Request-Method和Access-Control-Request-Headers字段以后,确认允许跨源请求,就可以做出回应。
3.4 一旦服务器通过了“预检”请求,以后每次浏览器正常的 CORS 请求,就都跟简单请求一样,会有一个Origin头信息字段。服务器的回应,也都会有一个Access-Control-Allow-Origin头信息字段。
3.4 文字内容有点多,把刚才描述的内容用一张流程图表述下,大家会清晰许多,如下所示:
4、与 JSONP 的比较
CORS 与 JSONP 的使用目的相同,但是比 JSONP 更强大。JSONP 只支持GET请求,CORS 支持所有类型的 HTTP 请求。JSONP 的优势在于支持老式浏览器,以及可以向不支持 CORS 的网站请求数据。
5、接下来给后端开发人员分享下如何配置跨域请求
5.1 PHP 简单示例
5.2 Node 开发人员使用 Express 简单示例:
5.2.1 首先安装 cors 中间件:
npm install cors
5.2.3 然后配置比如入口文件,server/
index.js
5.2.4 你可以对跨域进行配置,如下图所示:
5.2.5 你可以做个请求示例尝试下,如果一切正常,你可以在 web 开发者工具中看到如下所示:
java 的由于我不太熟,可以自行解决方案,原理和 PHP 的道理是差不多的。
常用方法三:nginx 反向代理这个方法应用也十分广泛,也是十分常见的,这也需要服务端配合下面还是用一段Ngxin配置来说明这个问题,如下图所示:
实现原理类似于Node中间件代理,需要你搭建一个中转nginx服务器,用于转发请求。使用nginx反向代理实现跨域,是最简单的跨域方式。只需要修改nginx的配置即可解决跨域问题,支持所有浏览器,支持session,不需要修改任何代码,并且不会影响服务器性能。实现思路:通过nginx配置一个代理服务器(域名与domain1相同,端口不同)做跳板机,反向代理访问domain2接口,并且可以顺便修改cookie中domain信息,方便当前域cookie写入,实现跨域登录。
小节以上是解决跨域问题最常用的三种方式,应该能解决你业务中遇到的问题,有点需需要提示的是方法二和方法三不要混着用,否则会报“Access-Control-Allow-Origin Not Allow Multiple value”的错误,我推荐大家用方法三使用nginx反向代理做跨域解决方案,比较简单和直接,可谓一劳永逸。当然跨域的方法还有其他的,比如使用WebSocket、postMessage API 、各种 iframe 的解决方案,由于不太常用和篇幅问题原因,就不再一一介绍了,感兴趣的小伙伴们可以自行搜索。
如果你觉得本回答分享对你有所帮助,欢迎给个赞👍支持下,分享出去让更多的人知道,如果你有其它的方法,欢迎再留言区进行分享。
注:本回答第二部部分参考阮一峰的《JavaScript 标准参考教程(alpha)》
更多前端内容分享,欢迎关注「前端达人」及其微信公众号
是否有可能用JS替代JSON?
外行?理论上,js是一种脚本语言(JavaScript),json(JavaScriptObject Notation, JS 对象简谱)是一种轻量级数据交换格式,是js的一个子集,没有替代不替代一说,后端语言php、java等开发的api接口,返回json标准格式数据,便于前端调用,前端可以使用js读取json数据结果展示到网站上!为什么是json,因为json是一个标准的数据交互格式,大部分语言都可以读取json数据,这样的话就可以开发多端,比如流行的微信小程序、app、网站三端,同步数据!