GVKun编程网logo

基于Ajax的网站上的OpenGraph(ajax网站开发)

26

在这里,我们将给大家分享关于基于Ajax的网站上的OpenGraph的知识,让您更了解ajax网站开发的本质,同时也会涉及到如何更有效地10个基于Ajax的PHPWebmail客户端、12_基于aja

在这里,我们将给大家分享关于基于Ajax的网站上的OpenGraph的知识,让您更了解ajax网站开发的本质,同时也会涉及到如何更有效地10个基于Ajax的PHP Webmail客户端、12_基于ajax的程序开发、ajax使用总结-ajax的配置-ajax的调用-ajax的中文乱码-ajax的表单提交、ajax的open和send的内容。

本文目录一览:

基于Ajax的网站上的OpenGraph(ajax网站开发)

基于Ajax的网站上的OpenGraph(ajax网站开发)

我有一个网站,该网站完全基于Ajax(哈希导航)。

有没有一种方法可以使用Javascript刷新基于ajax的网站的Open Graph元标记?(当我单击一个链接时,标记和其中的值应更改)

答案1

小编典典

否。OpenGraph标记必须出现在带有纯HTTP的GETable的HTML页面上。

这是因为当用户与OG对象进行交互(例如执行操作等)时,Facebook将在OG URL上执行HTTP GET,并期望看到标记中返回的OG标签。

解决方案是为每个对象创建规范的URL。这些URL包含基本的HTML标记,包括OG标签。

在对这些URL的请求中,如果看到包含“
facebookexternalhit”的传入用户代理字符串,则呈现HTML。如果您不这样做,则可以使用302重定向到您的ajax URL。在ajax
URL上,您的“喜欢”按钮和您发布的所有OG操作均应指向规范的URL对象

例:

作为用户,我在http://yoursite.com/#!/artists/monet上。我单击了“喜欢”按钮,或发布了一个动作,但是“喜欢”按钮的href参数或发布动作时对象的URL应该是对象的网络可点击规范网址-
在这种情况下,也许是http:// yoursite .com / artists /
monet

当使用浏览器的用户点击http://yoursite.com/artists/monet时,您应该将其重定向到http://yoursite.com/#!/artists/monet,但是如果传入的用户代理说这是Facebook的刮板,您只需返回代表艺术家莫奈的标记。

有关真实示例,请参阅均使用此设计模式的Deezer,Rdio和Mog。

10个基于Ajax的PHP Webmail客户端

10个基于Ajax的PHP Webmail客户端

1. RoundCube

RoundCube Webmail 是一个基于浏览器的IMAP 客户端,其提供了丰富的功能,包含MIME,地址本,文件夹操作,邮件搜索和拼写检查。 RoundCube Webmail 由 PHP写成,需要 MySQL 或 Postgres 数据库的支持。其UI完全遵守于XHTML 和 CSS 2.

2. Zimbra

Zimbra 提供了一个开源的邮件和日历系统,也是基于Ajax技术,非常强大的客户端,他可以通过web service集成第三方的应用“mash-ups” ,于是你可以享有CRM,地图或其它更多的功能。

3. Xuheki

Xuheki 是一个很快的 IMAP 使用AJAX技术开发的客户端。你能想到的功能它基本上都有了,它使用的是 GNU General Public License.

4. SquirrelMail

SquirrelMail 这是一个中规中矩的webmail,PHP语言写成,并没有使用AJAX技术,所以并不是很炫,不过它是使用了纯内建的PHP功能支持了IMAP和SMTP。所有的页面都是纯HTML 4.0 (没有任何JavaScript) ,这样的目的主要是为了最大化兼容于不同的浏览器。

5. Atmail

AtMail, 一个免费的轻量级的 Ajax Webmail 客户端,由PHP写成,支持WEB和WAP。

6. afterlogic

AfterLogic WebMail Lite PHP 是一个非常易用的 webmail 但其界面又非常Cool,其支持 AJAX 和皮肤。支持POP3 和 SMTP。支持收发邮件,多附件,多帐号,多域,邮件预览,站点管理。安装非常容易,需要PHP 4.1+,完全开源并完全免费。

7. Hastymail

Hastymail 是一个有完整功能的 IMAP/SMTP 客户端,由 PHP 写成。兼容于 PDAs, 手机, 文本浏览器,以及所有的主流浏览器。 Hastymail 有强大的 插件 系统,因为PHP程序员可以随意地改变或增加自己想要的插件。

8. Mailr

Mailr 是一个开源的 webmail 由 Ruby写成,它使用 Ruby On Rails 的web application 框架。

9. Claros inTouch

Claros inTouch 是一个Ajax 消息套装其包含了主要特性有webmail,地址本,记事本,日历(还在开发),网络硬盘 (还在开发),内建的即时聊天,以及RSS阅读器。这是第一个开源的webmail其包含了内建的垃圾邮件保护和即时聊天功能的项目。但主要使用了Java语言,利用 JSP/Servlets 及 J2EE技术和 MySQL 数据库。

10. Postaci

Postaci 是一个基于 PHP 的POP3/IMAP 邮件客户端,其支持 SMTP 认证。 其使用MySQL, mSQL, Microsoft SQL, Sybase 或PostgreSQL数据库。

12_基于ajax的程序开发

12_基于ajax的程序开发

12.1 ajax的历史由来

ajax(asynchronous javascript and xml),异步的javascript和xml


12.2 b/s结构的用户体验问题

示例12-1:模拟传统的用户注册流程

源文件:register.html

<!DOCTYPE html>
<html>
  <body>
	<h1>Demo 邮件系统  - 用户注册</h1>
	<form name="regForm" id="regForm" action="doRegister.jsp" method="post">
		注册用户名:<input type="text" name="userName" id="userName" /><br />
		注册密码:<input type="password" name="password" id="password" /><br />
		确认密码:<input type="password" name="password2" id="password2" /><br />
		<input type="submit" value="提交" />
	</form>
  </body>
</html>

源文件:doRegister.jsp
<%@ page language="java" import="java.util.*" %>
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>

<%
String userName = request.getParameter("userName");

if("scott".equals(userName)){
	out.println("用户名" + userName + "已经被占用了,请重新选择用户名!");
}else{
	out.println("恭喜您," + userName + "注册成功了!");
}
%>

示例12-2:对传统的用户注册流程进行改进

源文件:register.html

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function checkName(){
	var cun = document.getElementById("checkUserName");
	var un = document.getElementById("userName");
	
	cun.value = un.value;
	document.getElementById("checkForm").submit();
}
</script>
</head>
<body>
	<h1>Demo 邮件系统  - 用户注册</h1>
	<form name="regForm" id="regForm" action="D02_doRegister.jsp" method="post">
		注册用户名:
		<input type="text" name="userName" id="userName" />
		<input type="button" value="检测用户名" onclick="checkName();"/>
		<br />
		注册密码:<input type="password" name="password" id="password" /><br />
		确认密码:<input type="password" name="password2" id="password2" /><br />
		<input type="submit" value="提交" />
	</form>
	<form id="checkForm" name="checkForm" action="D04_checkUserName.jsp" method="post" target="_blank">
		<input type="hidden" id="checkUserName" name="checkUserName" />
	</form>
</body>
</html>

源文件:doRegister.jsp
<%@ page language="java" import="java.util.*" %>
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>

<%
String userName = request.getParameter("checkUserName");

if("scott".equals(userName)){
	out.println("用户名" + userName + "已经被占用了,请重新选择用户名!");
}else{
	out.println("恭喜您," + userName + "注册成功了!");
}
%>


12.3 采用ajax技术提升用户体验

示例12-3:采用ajax技术完成用户注册

源文件:register.html

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var req;

function checkUser(){
	var checkResult = document.getElementById("checkResult");
	checkResult.innerHTML = "正在检测用户名。。。";
	
	var userName = document.getElementById("userName").value;
	req = new ActiveXObject("Microsoft.XMLHttp");
	req.open("get","http://localhost:8080/08_ajax/D04_checkUserName.jsp?checkUserName=" + userName);
	req.onreadystatechange = handleRequest;
	req.send(null);
}

function handleRequest(){
	var checkResult = document.getElementById("checkResult");
	if(req.readyState == 4){
		if(req.status == 200){
			checkResult.innerHTML = req.responseText;
		}else{
			alert("An error occurred:" + req.statusText);
		}
	}
}
</script>
</head>

<body>
	<h1>Demo 邮件系统  - 用户注册</h1>
	<form name="regForm" id="regForm" action="doRegister.jsp" method="post">
		注册用户名:
		<input type="text" name="userName" id="userName" onblur="checkUser();" />
		<label id="checkResult"></label>
		<br />
		注册密码:<input type="password" name="password" id="password" /><br />
		确认密码:<input type="password" name="password2" id="password2" /><br />
		<input type="submit" value="提交" />
	</form>
</body>
</html>


12.4 ajax原理解析

1.JavaScript

javascript is the soul of internet,推荐学习书籍《JavaScript权威指南》

2.DOM

DOM,也就是文档对象模型(Document Object Model),推荐书籍同上

3.XML和CSS

4.XMLHttpRequest对象

兼容浏览器的创建方法:

function createXHR(){
	var xhr;
	
	try{
		xhr = new ActiveXObject("Msxml2.XMLHTTP");
	}catch(e){
		try{
			xhr = new ActiveXObject("Microsoft.XMLHTTP");
		}catch(E){
			xhr = false;
		}
	}
	
	if(!xhr && typeof XMLHttpRequest != 'undefined'){
		xhr = new XMLHttpRequest();
	}
	
	return xhr;
}


12.5 使用XMLHttpRequest对象与服务器端通信

12.5.1 使用open方法创建一个请求

12.5.2 使用send方法发送一个请求

12.5.3 使用onreadystatechange时间捕获请求状态变化

12.5.4 使用readyState属性判断请求状态变化

12.5.5 使用status属性判断请求的结果

12.5.6 使用responseText获得返回的文本

示例12-4:改进ajax技术

源文件:register.html

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function createXHR(){
	var xhr;
	
	try{
		xhr = new ActiveXObject("Msxml2.XMLHTTP");
	}catch(e){
		try{
			xhr = new ActiveXObject("Microsoft.XMLHTTP");
		}catch(E){
			xhr = false;
		}
	}
	
	if(!xhr && typeof XMLHttpRequest != 'undefined'){
		xhr = new XMLHttpRequest();
	}
	
	return xhr;
}

var req;

function checkUser(){
	var checkResult = document.getElementById("checkResult");
	checkResult.innerHTML = "正在检测用户名。。。";
	
	var userName = document.getElementById("userName").value;
	req = createXHR();
	req.open("get","http://localhost:8080/08_ajax/D04_checkUserName.jsp?checkUserName=" + userName);
	req.onreadystatechange = handleRequest;
	req.send(null);
}

function handleRequest(){
	var checkResult = document.getElementById("checkResult");
	if(req.readyState == 4){
		if(req.status == 200){
			checkResult.innerHTML = req.responseText;
		}else{
			alert("An error occurred:" + req.statusText);
		}
	}
}
</script>
</head>

<body>
	<h1>Demo 邮件系统  - 用户注册</h1>
	<form name="regForm" id="regForm" action="doRegister.jsp" method="post">
		注册用户名:
		<input type="text" name="userName" id="userName" onblur="checkUser();" />
		<label id="checkResult"></label>
		<br />
		注册密码:<input type="password" name="password" id="password" /><br />
		确认密码:<input type="password" name="password2" id="password2" /><br />
		<input type="submit" value="提交" />
	</form>
</body>
</html>


12.6 JavaScript开源框架Prototype简介

12.6.1 prototype常用方法

示例12-5:prototype常用方法$()和$F()

源文件:prototypeSimpleDemo.html

<!DOCTYPE html>
<html>
  <head>
    <title>prototype</title>
    <script type="text/javascript" src="js/prototype.js"></script>
    <script type="text/javascript">
    	function antiSelect(){
    		var fm = $('f1');
    		alert(fm.innerHTML);
    		
    		var cbs = $('c1','c2','c3');
    		for(var i=0; i<cbs.length; i++){
    			var flag = cbs[i].checked;
    			if(flag)
    				cbs[i].checked = false;
    			else
    				cbs[i].checked = true;
    		}
    	} 
    	
    	function getTestValue(){
    		alert($F('t1'));
    	}
    </script>
  </head>
  
  <body>
	<form id="f1" name="f1" action="" method="post">
		first:<input type="checkBox" id="c1" value="c1" />
		second:<input type="checkBox" id="c2" value="c2" />
		thiird:<input type="checkBox" id="c3" value="c3" />
		<input type="button" value="反选" onclick="antiSelect();" />
		<hr />
		<input type="text" value="hello world" id="t1" /> 
		<input type="button" value="test" onclick="getTestValue();" />
	</form>
  </body>
</html>
12.6.2 ajax对象

示例12-6:用prototype实现ajax

源文件:prototypeAjax.html

<!DOCTYPE html>
<html>
  <head>
    <title>用prototype实现Ajax</title>
    <Meta http-eqiuv="content-type" content="text/html; charset=utf-8">

	<script type="text/javascript" src="js/prototype.js"></script>    
	<script type="text/javascript">
		function checkUser(){
			var checkResult = $('checkResult');
			checkResult.innerHTML = "正在检测用户名。。。";
			var userName = $F('userName');
			var url = "http://localhost:8080/08_ajax/D04_checkUserName.jsp?checkUserName=" + userName;
			var pars = "";
			var req = new Ajax.Request(url,{
				method: 'get',parameters: pars,onComplete: handleRequest
			});
		}
		
		function handleRequest(info){
			$('checkResult').innerHTML = info.responseText;
		}
	</script>
  </head>
  	<h1>Ajax的Prototype实现</h1>
  	<form id="regForm" name="regForm" action="D02_doRegister.jsp" method="post">
  		注册用户名:
  		<input type="text" id="userName" name="userName" onblur="checkUser();" />
  		<label id="checkResult"></label><br />
  		注册密码:<input type="password" id="password" name="password" /><br />
  		确认密码:<input type="password" id="password2" name="password2" /><br />
  		<input type="submit" value="提交" />
  	</form>
  <body>	
  </body>
</html>

ajax使用总结-ajax的配置-ajax的调用-ajax的中文乱码-ajax的表单提交

ajax使用总结-ajax的配置-ajax的调用-ajax的中文乱码-ajax的表单提交


·jquery的使用 0、必须优先引入jquery.js 否则无法调用jquery框架 1、js区分大小写,起名字的时候要注意 2、jquery根据div的id属性获取页面text的值:$("#demoID").val(),根据class属性获取页面text的值$(".demoCLASS").val(),如果是赋值$("#demoID").val("赋值的参数") 3、$(document).ready(function(){代码})、$().ready(function(){代码})、$(function(){代码})的含义一样 4、多个$(function(){代码})可以并存,即只要名字不重复可以同时发挥作用 5、$(function(){代码})的意思是页面加载完毕即运行,比如自动点击,自动弹框,再或者点击监听或者其他监听 6、加载完即点击和“点击的监听”的区别(非常有借鉴意义) 比如现在有一个js方法,function demoFunction(){alert("这个方法运行了");}; 加载完即点击:$("#demoid").click(demoFunction()); 加载完后即监听,这个方法只能是在按钮有click这个动作,或者通过jquery有click()动作:$("#demoid").click(function(){demoFunction()}); 7、如果是自动加载即运行的,或者需要被监听的都需要放置到$(document).ready(function(){代码})的代码中 8、window.onload=function(){代码}与$(function(){代码})的区别 ·调用函数的用法不同: window.onload = function(){代码}; $(function(){代码}) ·调用函数的时间不同 window.load=function(){代码}:必须等待网页中所有的内容加载完毕(包括图片)才能执行,比如要运用上传等功能。 $(function(){代码}),等到网页中所有的DOM结构绘制完毕后就可以执行。 9、AJAX专题 ·需要的jar包:commons-lang-2.5.jar、commons-lang3-3.1.jar、javassist-3.11.0.GA.jar ·前台js的写法:为了简化流程,写成页面加载即运行 $(document).ready(function(){ $.ajax({ url : "testajax.do",// 请求地址 //timeout : 600000,//超时时间设置,单位毫秒 async : false,// 异步 cache : false,// 缓存 type : 'post',// 请求方式 data: {"name":"123"},//data: $('#formid').serialize(),//序列化表单-当触发一个form表单提交的ajax事件的时候,这个序列化方法自动将数据转化围殴json格式传递给后台 dataType : 'json',// 服务器返回的数据类型 success : function(msg) {// 请求成功后调用的 alert("返回json的实验成功了"+" msg.resultcode="+msg.resultcode+" msg.name="+msg.name); },error :function(){ alert("异常"); } }); }); ·struts.xml文件的写法 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!--略去一些struts2的配置信息--> <package name="myajax" extends="json-default" namespace="/"> <global-results> <result name="message" type="json"> <param name="root">message</param> </result> </global-results> <action name="*"method="{1}"> <result name="list">/index.jsp</result> </action> </package> <!-- 包含的其他配置文件 --> <include file="struts-method.xml"></include> </struts> ·后台java代码:仅距离调用ajax,故不涉及数据库操作 import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; public class AjaxTest { protected Map<String,Object> message = new HashMap<String,Object>(); /** AJAX请求返回RESULT的name常量*/ protected final static String MESSAGE = "message"; public Map<String,Object> getMessage() { return message; } public void setMessage(Map<String,Object> message) { this.message = message; } //-登录页面中form表单提交的路径 public String testajax() throws IOException{ System.out.println("获取参数name="+ServletActionContext.getRequest().getParameter("name")); message.put("resultcode","0000"); message.put("resultcode","0001"); message.put("name","zhong文ce试"); return MESSAGE; } } ·ajax的应用之提交form表单数据-表单数据自动转json格式 场景描述:当具体的提交信息为一个form表单,并通过ajax传递给后台时,我们通常使用一个叫序列化的方法将这个form表单转化为json格式传递给后台。 ·form表单的格式,form标签有id,input标签有name <form id="formid"> 姓名:<input type="text" name="name" value="张三"/><br> 年龄:<input type="text" name="age" value="12"/><br> <input type="submit" value="提交" id="submitid"/> </form> ·js部分的代码-可以单独写在一个js文件,注意,需要先引入jquery.js文件 $(document).ready(function(){ $("#submitid").click(function(){ajaxhere()}); }); //提交表单的ajax function ajaxhere(){ $.ajax({ url : "testajax3.do",// 请求方式 data: $('#formid').serialize(),//序列化表单 dataType : 'json',// 服务器返回的数据类型 //contentType:"application/x-www-form-urlencoded; charset=utf-8",success : function(msg) {// 请求成功后调用的 alert("form表单触发的实验成功了"+" msg.resultcode"+msg.resultcode+" msg.name="+msg.name); },error :function(){ alert("异常"); } }); }; ·传统的ajax返回方式,即java部分的返回写在流里-特别要注意这里的处理中文乱码的解决方式 HttpServletResponse response = ServletActionContext.getResponse(); response.setCharacterEncoding("utf-8"); PrintWriter writer = response.getWriter(); String a = "{\"resultcode\":\"0000\",\"name\":\"文试\"}"; writer.write(a); writer.flush(); writer.close();

ajax的open和send

ajax的open和send


open方法创建一个请求,并准备向服务器发送,原型为:

open(method,url,async,user,password)

method(get,post)

url,请求地址

async 请求是同步还是异步,同步为true,异步为false,默认为true

user 指定请求的用户名,没有就省略

password 同上

send方法向服务器发送请求,原型如下:

send(body)

该方法只用一个body参数,

var body="username=jack&sex= male";

定义项服务器发送2个值,用&分隔开。

如果在open中指定的是get方法,则服务器端一般用request.querystring获取;如果是post方法,则服务器端一般使用request.form获取。

比起get方法,post方法需要设置请求的HTTP头,通过以下语句实现:

xmlhttp:setRequestHeader('Content-type','application/x-www-form-urlencoded');

在get方法中,提交的数据既可以放在请求的url中,也可以放在send方法中。而在post方法中所有数据都是通过send方法提交的。

关于基于Ajax的网站上的OpenGraphajax网站开发的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于10个基于Ajax的PHP Webmail客户端、12_基于ajax的程序开发、ajax使用总结-ajax的配置-ajax的调用-ajax的中文乱码-ajax的表单提交、ajax的open和send等相关内容,可以在本站寻找。

本文标签: