添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

html,javascript,php混在一起使用

3 年前

html

javascript

php

综合应用。


做一道豆腐,需要豆腐,大蒜,辣椒,油,盐,锅,煤气。。。

每一样参与者,都有他的作用。

做web一样,也有很多的参与者,他们各自发挥不同的作用。

那他们混在一起是怎么彼此作用的呢?


下面是html代码,来自参考网站。

html代码里面,嵌入了一个clientHint.js

这个是javascript代码文件

clientHint.js代码什么时候执行呢?

里面是什么内容呢?稍后。

html产生的内容,是用户可以直接用浏览器看到的静态的内容。

里面有一个form表单。

这个表单,是用户输入信息的。

用户在一个输入框里面输入信息。

<input type="text">

当用户输入信息完成之后,(这个是一个事件)

触发一个函数

onkeyup="函数"

函数:showHint(this.value)

这个函数的定义是哪里呢?

从哪里冒出来的呢?

函数的定义,在前面嵌入的clientHint.js代码里面。

以前写的form,填写表单之后,

会有一个submit提交按钮。

会有一个action跳转到某个页面。

这里,看不到这两样。

html里面还有p

还有span

p和span的作用,就是显示文字内容的。



<html>
<script src="clientHint.js"></script> 
</head>
First Name:
<input type="text" id="txt1"
onkeyup="showHint(this.value)">
</form>
<p>Suggestions: <span id="txtHint"></span></p>
</body>
</html>

接下来看看clienthint.js

var是声明一个变量xmlHttp

function是声明一个函数,这里可以找到html里面的showHint函数的定义。

而且这个函数后面有一个str,表示此函数接收一个传入的参数。

进入函数里面,

if(str.length==0)

str.length是计算这个字符串的长度

==是比较运算

如果字符串长度是0,

document.getElementById("txtHint").innerHTML=""

这个是啥意思?

在html里面,有

<span id="txtHint">

所以,在js里面,

document.getElementById("txtHint")

代表通过id,找到标签span

然后指定span的innerHTML属性,

也就是让他显示一些内容。

如果长度是0,就不显示。

js就控制了网页的行为。


如果用户输入了字符串:也就是字符串长度非零。

xmlHttp=GetXmlHttpObject()

函数showHint里面调用了一个函数GetXmlHttpObject

函数返回结果赋值给xmlHttp

问题:GetXmlHttpObject函数是什么呢?

这个函数的定义是什么呢?

函数在被调用的时候,都要去看一下函数定义是什么,这样才知道函数在做什么。

在showHint函数的外面,找到了函数GetXmlHttpObject定义。

函数声明了一个变量

var xmlHttp,初始化为null

接下来是一个try语句

try就是试一试,试一试这样来初始化对象。

xmlhttp=new XMLHttpRequest()

如果试一试不成功,

就再试一试

xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");

如果试一试不成功,就再试一试

xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");

try

{

}

catch(e)

{

try

{}

catch(e)

{}

}

然后函数返回xmlhttp


看完了调用的函数长什么样子,现在回到showHint函数里面。

如果xmlhttp是null,

给一个提示框,浏览器不支持

退出。

如果xmlhttp不是null,

声明一个url变量

赋值为gethint.php

注意:这样在js代码里面就和php发生了关系。

要注意是怎么建立这种关系的。

在html里面,通过script标签,建立和js代码的关系。

在js代码里面,通过document.getElementById,建立和html的关系。

在js代码里面,通过变量url建立和php关系。


url=gethint.php?q=str&sid=Math.random()

这个url是什么意思呢?

?前面,是一个php页面

?后面,是传递到php页面的参数,一个是q,他的值是字符串

一个是sid,他的值是随机数字

总共2个参数。

下面几句是对象点操作。

xmlHttp.onreadystatechange=stateChanged

xmlHttp对象

更新,怎么更新,查看函数stateChanged

通过判断readystate属性,如果满足条件,就更新,

更新的结果,就是改变html内容。

document.getElementById("txtHint").innerHTML=xmlHttp.responseText

把xmlHttp接收的内容赋值给html上的span标签。

下一句是打开,下一句是send

xmlHttp.open()函数里面,传入了url,url里面有php

这样就和php发生了联系。

Get,url,true

Get是一种传数据的method

url,里面包含了php和2个参数

然后是发送。

现在要看一下什么呢?

看一下发送以后,php方面做了什么事。

var xmlHttp
function showHint(str)
if (str.length==0)
  document.getElementById("txtHint").innerHTML=""
  return
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
  alert ("Browser does not support HTTP Request")
  return
var url="gethint.php"
url=url+"?q="+str
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged 
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
function stateChanged() 
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
 document.getElementById("txtHint").innerHTML=xmlHttp.responseText 
function GetXmlHttpObject()
var xmlHttp=null;
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
catch (e)
 // Internet Explorer
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
 catch (e)
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
return xmlHttp;




php

<?php

?>

是php的一种格式

代表里面的代码是php代码。

$a[]

表示一个数组

里面装了很多的元素

这里面就是很多个名字。

$_GET["q"]

前面提到,在js里面,构造了url,而且打开了url,发送了url

所以php里面,可以接收到参数。

q=str(这个在js里面已经说明了)

获得参数,赋值给$q

这个就是用户输入。

判断字符串长度,

如果字符串长度是大于零,

strlen($q)>0

声明一个变量,$hint

初始化为空

for($i=0; $i<count($a); $i++)

这个是遍历数组,从头开始查询数组。

count($a)是求数组的个数

$i是数组下标

当下标是0的时候:

strtolower($q)把用户输入变小写

if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))

substr是求子串。

有3个参数

第一个参数:表示数组a,下标是$i的元素。

第二个参数:位置0

第三个参数:表示用户输入字符串的长度

也就是,查询数组,看数组元素的子串,转为小写,和用户输入,转为小写,是否相等。

也就是说,数组里面的名字,如果包含用户输入。

包含:

abc包含a

abc包含ab

如果包含:

如果hint变量是空,就把名字赋值给hint

如果hint不是空,就把名字连接到hint上面。

这里面看懂了吗?

就是说,数组里面有很多的名字,

挨个查询,

如果用户输入是这名字的子串,那么就保存这个名字。

因为数组有很多名字,如果用户输入是数组里面很多名字的子串,保存的名字就多。(这时候hint做了一个连接)$hint=$hint." , ".$a[$i];

然后看hint

如果hint是空,response就是no suggestion

如果hint 不是空,response就是hint

然后把response输出来。

这样就是php对接收到的数据做了处理。

处理的结果,会在html里面显示。









<?php
// Fill up array with names
$a[]="Anna";
$a[]="Brittany";
$a[]="Cinderella";
$a[]="Diana";
$a[]="Eva";
$a[]="Fiona";
$a[]="Gunda";
$a[]="Hege";
$a[]="Inga";
$a[]="Johanna";
$a[]="Kitty";
$a[]="Linda";
$a[]="Nina";
$a[]="Ophelia";
$a[]="Petunia";
$a[]="Amanda";
$a[]="Raquel";
$a[]="Cindy";
$a[]="Doris";
$a[]="Eve";
$a[]="Evita";
$a[]="Sunniva";
$a[]="Tove";
$a[]="Unni";
$a[]="Violet";
$a[]="Liza";
$a[]="Elizabeth";
$a[]="Ellen";
$a[]="Wenche";
$a[]="Vicky";
//get the q parameter from URL
$q=$_GET["q"];
//lookup all hints from array if length of q>0
if (strlen($q) > 0)
$hint="";
for($i=0; $i<count($a); $i++)
  if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))
    if ($hint=="")
      $hint=$a[$i];
      $hint=$hint." , ".$a[$i];
//Set output to "no suggestion" if no hint were found
//or to the correct values
if ($hint == "")
$response="no suggestion";