前后端开发(2):浏览器与PHP程序的交互
上一节介绍怎么在mac电脑上启用PHP程序,并且演示了一个简单的例子,这个例子运行时,涉及了浏览器、apache以及PHP程序的交互,这三者的关系大概是这样的:
一般来说,浏览器(或者类似功能的程序)给apache(或者其它服务器)发送的数据称作“表单”,表单就相当一个“界面”,小程觉得从“界面”入手去理解交互的流程是一个可行的办法。
本文介绍如何提交一个表单,以及引发的相应交互。 那么,在浏览器上点击一个“按钮”,会引发什么样的交互行为呢?
(一)交互一,浏览器给apache发送数据
浏览器以表单的形式给apache发送数据。
表单的标签是:,比如下面一个html页面,留意里面标签的内容:
<html>
<meta charset="utf-8">
<body>
<form action="login.php" method="post">
昵称:<input type="text" name="name">
口号:<input type="text" name="slogan">
<input type="submit" value="提交">
</form>
</body>
</html>
html页面(相当于整体的界面),包括中的内容,由浏览器来解析。比如上面的这个html页面,解析后的样子是这样的:
可以看到,有两个文本输入框,还有一个提交按钮。
如果浏览器只做解析显示的工作,那就没有apache跟PHP程序什么事情了。实际上,浏览器经常要把数据发送给apache,而发送的数据就是标签(即表单)的数据。
表单数据,可以在标签中找到,其中可以包括按钮、下拉菜单、文本输入框等等元素。比如上面那个表单:
注意,上面的表单,还把PHP代码文件发给了apache,如果项目目录(默认是/Library/WebServer/Documents)下面没有这个php文件,那么在点击提交按钮后,会看到这样的提示:
那么,发送的时机是什么?即浏览器在什么时候发送表单数据给apache?
在点击“submit”类型的按钮的时候触发发送。如果没有submit按钮,则需要通过js主动触发表单的submit事件。
另外,在发送的method上,区分为get与post方式。
get方法,表单的所有信息都出现在请求的url中(在地址栏上可以看到),对于长度也有限制。比如,这样的get请求:
其中name与slogan是键(key),而abc与hello world是对应的值(value),表单的数据就是键值对的集合。
post方法,请求时不会显示表单的任何数据,对于长度限制也很弱。
(二)交互二,PHP代码访问表单的内容
表单中可以指定把项目目录中的php文件的内容(或者当前的脚本--比如既有表单又有php代码)提交给apache。apache在拿到php代码后,会交由PHP程序来处理,而这些php代码很可能需要访问表单的内容,比如login.php代码中,需要访问表单中的文本框的内容,那如何访问呢?
表单的内容(键值对的集合),会保存在$_GET变量(get方法时)或$_POST变量(post方法时)中,这个在apache调用PHP程序时就初始化好。
所以,PHP代码可以通过访问$_GET或$_POST变量来访问表单的内容。
比如,login.php的代码可以这样写:
<meta charset="utf-8">
你好,<?php echo $_GET["name"]; ?>! <br>
你的口号是:<?php echo $_GET["slogan"];?> !
再次提交这个表单时,在浏览器上可以看到这样的提示:
明显,还要区分是用$_GET还是$_POST是麻烦的,这时,可以使用$_REQUEST变量来访问,$_REQUEST对于get或post方式都适用。
应该留意到,PHP程序解析出结果后,把结果返回给apache,apache返回html页面给浏览器,最终浏览器显示结果。
总结一下,本文从一个简单表单请求的例子入手,介绍了表单的概念,以及请求过程中涉及到的两个重要的交互,并引出了_REQUEST等变量的使用。
前后端开发(2):浏览器与PHP程序的交互的更多相关文章
- ABP开发框架前后端开发系列---(3)框架的分层和文件组织
在前面随笔<ABP开发框架前后端开发系列---(2)框架的初步介绍>中,我介绍了ABP应用框架的项目组织情况,以及项目中领域层各个类代码组织,以便基于数据库应用的简化处理.本篇随笔进一步对 ...
- ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用
在前面几篇随笔介绍了我对ABP框架的改造,包括对ABP总体的介绍,以及对各个业务分层的简化,Web API 客户端封装层的设计,使得我们基于ABP框架的整体方案越来越清晰化, 也越来越接近实际的项目开 ...
- ABP开发框架前后端开发系列---(4)Web API调用类的封装和使用
在前面随笔介绍ABP应用框架的项目组织情况,以及项目中领域层各个类代码组织,以及简化了ABP框架的各个层的内容,使得我们项目结构更加清晰.上篇随笔已经介绍了字典模块中应用服务层接口的实现情况,并且通过 ...
- ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程
在前面随笔介绍的<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>里面,介绍了如何改进和完善审计日志和登录日志的应用服务端和Winform客户端,由于篇幅限制,没有进 ...
- ABP开发框架前后端开发系列---(12)配置模块的管理
一般来说,一个系统或多或少都会涉及到一些系统参数或者用户信息的配置,而ABP框架也提供了一套配置信息的管理模块,ABP框架的配置信息,必须提前定义好配置的各项内容,然后才能在系统中初始化或者通过接口查 ...
- ABP开发框架前后端开发系列---(14)基于Winform的ABP快速开发框架
前面介绍了很多ABP系列的文章,一步一步的把我们日常开发中涉及到的Web API服务构建.登录日志和操作审计日志.字典管理模块.省份城市的信息维护.权限管理模块中的组织机构.用户.角色.权限.菜单等内 ...
- ABP开发框架前后端开发系列---(16)ABP框架升级最新版本的经验总结
有一小段时间没有持续升级ABP框架了,最近就因应客户的需要,把ABP框架进行全面的更新,由于我们应用的ABP框架,基础部分还是会使用官方的内容,因此升级的时候需要把官方基础ABP的DLL进行全面的更新 ...
- .net core webapi 前后端开发分离后的配置和部署
背景:现在越来越多的企业都采用了在开发上前后端分离,前后端开发上的分离有很多种,那么今天,我来分享一下项目中得的前后端分离. B/S Saas 项目:(这个项目可以理解成个人中心,当然不止这么点功能 ...
- ABP开发框架前后端开发系列---(2)框架的初步介绍
在前面随笔<ABP开发框架前后端开发系列---(1)框架的总体介绍>大概介绍了这个ABP框架的主要特点,以及介绍了我对这框架的Web API应用优先的一些看法,本篇继续探讨ABP框架的初步 ...
- ABP开发框架前后端开发系列---(10)Web API调用类的简化处理
在较早期的随笔<ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用>已经介绍了Web API调用类的封装处理,虽然这些调用类我们可以使用代码生成工具快 ...
随机推荐
- java server wrapper 和 maven assembly 插件
Java Service Wrapper工具YAJSW 简介信息 YAJSW是一个开源的Java服务包装(Java Service Wrapper)工具.YAJSW允许您把任何应用程序安装为windo ...
- Android官方教程翻译(4)——启动另一个Activity
Starting Another Activity 启动另一个Activity PREVIOUSNEXT THIS LESSON TEACHES YOU TO 这节课教你 1. Respond t ...
- 用Delphi即时判断当前的网络的连接方式
判断网络的是否连接或者连接方式,比较重要的一点就是是不是即时判断,如果你明明无连接,判断出来却说你有,连接上了,却说你还未连接,下面要介绍的两个方法中 InternetGetConnectedStat ...
- android4.4系统解决“ERRORcouldn't find native method”方法
android4.4系统解决"ERRORcouldn't find native method"方法 今天笔者在移植一个tv模块从android4.2到android4.4系统的设 ...
- HDU4421 Bit Magic 【2-sat】
叙述性说明: 这给出了一个矩阵,原来的请求a排列 2-sat称号.对于每一位跑步边,跑31位可 详细的施工方 注意N=1的情况特判,还有检查对称元素是否同样 #include <stdio.h& ...
- Android 百度地图 SDK v3.0.0 (四) 离线地图功能介绍
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直认为地图应用支持离线地图非常重要啊.我等移动2G屌丝,流量不易 ...
- TestNg依靠先进的采用强制的依赖,并依赖序列的------TestNg依赖于特定的解释(两)
原创文章,版权所有所有,转载,归因:http://blog.csdn.net/wanghantong TestNg使用dependsOnGroups属性来进行依赖測试, 測试方法依赖于某个或某些方法, ...
- 怎么样 javascript / js 在 建立map
设定map道路(它是非常有用的json履行) var a = {}; a["key1"] = "value1"; a["key2"] = & ...
- .NET VS 自定义新建代码文件模板
参考:http://www.cnblogs.com/fightingtong/p/3765914.html 在VS中新建文件时,可使用模板在文件中生成指定内容.只需要把IDE安装目录下的模板进行修改保 ...
- CentOS搭建python开发环境
装了个CentOS 5.5,想在上面搭个python的开发环境,可是还是遇到了很多问题,记录一下过程: 1.python升级 查看python版本 python -V Python 2.4.3 因为p ...