PHP如何返回json格式的数据给jquery

时间:2024.4.27

PHP如何返回json格式的数据给jquery

json格式的数据是我们在应用开发中一直会使用到的数据,如与jquery打交到或与api打交都会使用到json数据,那么PHP如何返回json格式的数据给jquery呢,下面我来给各位同学介绍介绍。

在jquery中操作json数据我们直接 $.parseJSON(returnString ) 了

代码如下复制代码

$(function(){

$('#send').click(function() {

$.getJSON('test.js', function(data) {

$('#resText').empty();

var html = '';

$.each( data , function(commentIndex, comment) {

html += '<div class="comment"><h6>' + comment['username'] + ':</h6><p class="para">' + comment['content'] + '</p></div>';

})

$('#resText').html(html);

})

})

})

你需要做的就是将数据存储为格式正确的 .json或者.js 文件。以下为示例所传送的json格式的数据

代码如下复制代码

[

{

"username": "张三",

"content": "沙发."

},

{

"username": "李四",

"content": "板凳."

},

{

"username": "王五",

"content": "地板."

}

]

上面讲到到的json数据是固定了,我们用php如何返回json数据呢

php输出JSON格式方法

页面中加入

header('Content-type: text/json');

这个头就是告知此文件输出类型为 json,这种形式我们见的最多的是验证码——php输出验证图片,pengyeguoji.com 有时php可以输出css文件,js文件等做一些有趣的事情。好的,我们测试一下吧

代码如下复制代码

< ?php

header('Content-type: text/json');

$fruits = array (

"fruits" => array("a" => "orange", "b" => "banana", "c" => "apple"), "numbers" => array(1, 2, 3, 4, 5, 6),

"holes" => array("first", 5 => "second", "third")

);

echo json_encode($fruits);

?>

实例

从数据库读取的数据生成json格式

代码如下复制代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="/1999/xhtml">

<head>

<title>第一php网提供的教程--将数据库读取的数据生成json格式</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script src="/ajax/libs/jquery/1.4/jquery.min.js" type="text/javascript"/></script>

<script language=javascript>

</script>

</head>

<body>

<pre>

<h1>请注意两种方法生成的对象数组在结构上的区别</h1>

<?php

echo '<h1>法一</h1>';

//假设以下数组是根据我们从数据库读取的数据生成的

$jarr=array('total'=>239,'row'=>array(

array('code'=>'001','name'=>'中国','addr'=>'Address 11','col4'=>'col4 data'), array('code'=>'002','name'=>'Name 2','addr'=>'Address 12','col4'=>'col4 data'), )

);

//法一:

$jobj=new stdclass();//实例化stdclass,这是php内置的空类,可以用来传递数据,由于json_decode后的数据是以对象数组的形式存放的,

//所以我们生成的时候也要把数据存储在对象中

foreach($jarr as $key=>$value){

$jobj->$key=$value;

}

print_r($jobj);//打印传递属性后的对象

echo '使用$jobj->row[0]['code']输出数组元素:'.$jobj->row[0]['code'].'<br>'; echo ' rczcqc.com 编码后的json字符串:'.json_encode($jobj).'<br>';//打印编码后的json字符串

//法二:

echo '<hr>';

echo '<h1>法二</h1>'; echo '编码后的json字符串:'; echo $str=json_encode($jarr);//将数组进行json编码 echo '<br>'; $arr=json_decode($str);// wxjd.net 再进行json解码 print_r($arr);//打印解码后的数组,数据存储在对象数组中 echo '使用$arr->row[0]->code输出数组元素:'.$arr->row[0]->code; ?> </body> </html>


第二篇:jquery与json的结合


jquery于json的结合

通过AJAX异步减少网络内容传输,而JSON则可以把传输内容缩减到纯数据;然后利用jQuery内置的AJAX功能直接获得JSON格式的数据;在客户端直接绑定到数据控件里面,从而达到最优。

1.设计htm页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="/1999/xhtml">

<head>

<title>test2</title>

<script language="javascript" type="text/javascript"

src="js/jquery-latest.pack.js"></script>

<script language="javascript" type="text/javascript"

src="js/PageDate.js"></script>

</head>

<body>

<div>

<div>

<br />

<input id="first" type="button" value=" << " /><input id="previous" type="button"

value=" < " /><input id="next" type="button" value=" > " /><input id="last"

type="button"

value=" >> " />

&nbsp;<span id="pageinfo"></span> <ul id="datas">

<li id="template">

<span id="OrderID">

订单ID

</span>/

<span id="CustomerID">

客户ID

</span>

<span id="EmployeeID">

雇员ID

</span>/

<span id="OrderDate">

订购日期

</span>/

<span id="ShippedDate">

发货日期

</span>/

<span id="ShippedName">

货主名称

</span>/

<span id="ShippedAddress">

货主地址

</span>/

<span id="ShippedCity">

货主城市

</span>/

<span id="more">

更多信息

</span>

</li>

</ul>

</div>

<div id="load" style="left: 0px; position: absolute; top: 0px; background-color: red">

LOADING....

</div>

<input type="hidden" id="pagecount" />

</div>

</body>

</html>

注:ID属性比较重要,用于数据绑定。

2.使用jQuery编写AJAX请求文件

var pageIndex = 1

var pageCount = 0;

$(function(){

GetPageCount();//取得分页总数

pageCount = parseInt($("#pagecount").val());//分页总数放到变量pageCount里 $("#load").hide();//隐藏loading提示

$("#template").hide();//隐藏模板

ChangeState(0,1);//设置翻页按钮的初始状态

bind();//绑定第一页的数据

//第一页按钮click事件

$("#first").click(function(){

pageIndex = 1;

ChangeState(0,1);

bind();

});

//上一页按钮click事件

$("#previous").click(function(){

pageIndex -= 1;

ChangeState(-1,1);

if(pageIndex <= 1)

{

pageIndex = 1;

ChangeState(0,-1); }

bind();

});

//下一页按钮click事件

$("#next").click(function(){ pageIndex += 1;

ChangeState(1,-1);

if(pageIndex>=pageCount) {

pageIndex = pageCount; ChangeState(-1,0); }

bind(pageIndex); });

//最后一页按钮click事件 $("#last").click(function(){ pageIndex = pageCount; ChangeState(1,0);

bind(pageIndex);

});

});

//AJAX方法取得数据并显示到页面上

function bind()

{

$("[@id=ready]").remove();

$("#load").show();

$.ajax({

type: "get",//使用get方法访问后台

dataType: "json",//返回json格式的数据

url: "Handler.ashx",//要访问的后台地址

data: "pageIndex=" + pageIndex,//要发送的数据

complete :function(){$("#load").hide();},//AJAX请求完成时隐藏loading提示 success: function(msg){//msg为返回的数据,在这里做数据绑定

var data = msg.table;

$.each(data, function(i, n){

var row = $("#template").clone();

row.find("#OrderID").text(n.OrderID);

row.find("#CustomerID").text(n.CustomerID);

row.find("#EmployeeID").text(n.EmployeeID);

row.find("#OrderDate").text(ChangeDate(n.OrderDate));

if(n.RequiredDate !== undefined)

row.find("#ShippedDate").text(ChangeDate(n.RequiredDate)); row.find("#ShippedName").text(n.ShipName);

row.find("#ShippedAddress").text(n.ShipAddress);

row.find("#ShippedCity").text(n.ShipCity);

row.find("#more").html("<a href=OrderInfo.aspx?id=" + n.OrderID + "&pageindex="+pageIndex+">&nbsp;More</a>");

row.attr("id","ready");//改变绑定好数据的行的id

row.appendTo("#datas");//添加到模板的容器中

});

$("[@id=ready]").show();

SetPageInfo();

}

});

}

function ChangeDate(date)

{

return date.replace("-","/").replace("-","/");

}

//设置第几页/共几页的信息

function SetPageInfo()

{

$("#pageinfo").html(pageIndex + "/" + pageCount); }

//AJAX方法取得分页总数

function GetPageCount()

{

$.ajax({

type: "get",

dataType: "text",

url: "Handler.ashx",

data: "getPageCount=1",

async: false,

success: function(msg){

$("#pagecount").val(msg);

}

});

}

//改变翻页按钮状态

function ChangeState(state1,state2)

{

if(state1 == 1)

{

document.getElementById("first").disabled = "";

document.getElementById("previous").disabled = ""; }

else if(state1 == 0)

{

document.getElementById("first").disabled = "disabled";

document.getElementById("previous").disabled = "disabled"; }

if(state2 == 1)

{

document.getElementById("next").disabled = "";

document.getElementById("last").disabled = "";

}

else if(state2 == 0)

{

document.getElementById("next").disabled = "disabled"; document.getElementById("last").disabled = "disabled"; }

}

3.利用JSON三方控件在服务器端获取JSON格式数据

<%@ WebHandler Language="C#" Class="jQueryJSON.Handler" %>

using System;

using System.Data;

using System.Web;

using System.Collections;

using System.Web.Services;

using System.Web.Services.Protocols;

using System.Configuration;

using System.Data.SqlClient;

using System.Text;

using System.Xml;

using NetServ.Net.Json;

namespace jQueryJSON

{

/// <summary>

/// $codebehindclassname$ 的摘要说明

/// </summary>

[WebService(Namespace = "http://tempuri.org/json/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class Handler : IHttpHandler

{

readonly int PageSize =

int.Parse(ConfigurationManager.AppSettings["PageSize"]);

public void ProcessRequest(HttpContext context)

{

context.Response.ContentType = "text/plain";

//不让浏览器缓存

context.Response.Buffer = true;

context.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);

context.Response.AddHeader("pragma", "no-cache");

context.Response.AddHeader("cache-control", "");

context.Response.CacheControl = "no-cache";

string result = "";

if (context.Request.Params["getPageCount"] != null) result = GetPageCount(); if (context.Request.Params["pageIndex"] != null)

{

string pageindex = context.Request.Params["pageIndex"];

//if (context.Cache.Get(pageindex) != null)

// result = context.Cache.Get(pageindex).ToString();

//else

//{

// result = GetPageData(context.Request.Params["pageIndex"]); // context.Cache.Add(

// pageindex,

// result,

// null,

// DateTime.Now.AddMinutes(1),

// System.Web.Caching.Cache.NoSlidingExpiration,

// System.Web.Caching.CacheItemPriority.Default,

// null);

//}

result = GetPageData(context.Request.Params["pageIndex"]); }

context.Response.Write(result);

}

private string GetPageData(string p)

{

int PageIndex = int.Parse(p);

string sql;

if (PageIndex == 1)

sql = "select top " + PageSize.ToString() + " * from Orders order by OrderID desc";

else

sql = "select top " + PageSize.ToString() + " * from Orders where OrderID not in(select top " + ((PageIndex - 1) * PageSize).ToString() + " OrderID from Orders order by OrderID desc) order by OrderID desc";

string dbfile = ConfigurationManager.ConnectionStrings["conn"].ToString(); SqlConnection conn = new SqlConnection(dbfile);

SqlDataAdapter da = new SqlDataAdapter(sql, conn);

DataTable dt = new DataTable("table");

da.Fill(dt);

return DataTableJson(dt);

}

private string GetPageCount()

{

string dbfile = ConfigurationManager.ConnectionStrings["conn"].ToString(); SqlConnection conn = new SqlConnection(dbfile);

SqlCommand cmd = new SqlCommand("select count(*) from Orders", conn); conn.Open();

int rowcount = Convert.ToInt32(cmd.ExecuteScalar());

conn.Close();

return ((rowcount + PageSize - 1) / PageSize).ToString(); }

private string DataTable2Json(DataTable dt)

{

StringBuilder jsonBuilder = new StringBuilder(); jsonBuilder.Append("{\"");

jsonBuilder.Append(dt.TableName);

jsonBuilder.Append("\":[");

for (int i = 0; i < dt.Rows.Count; i++)

{

jsonBuilder.Append("{");

for (int j = 0; j < dt.Columns.Count; j++)

{

jsonBuilder.Append("\"");

jsonBuilder.Append(dt.Columns[j].ColumnName); jsonBuilder.Append("\":\"");

jsonBuilder.Append(dt.Rows[i][j].ToString());

jsonBuilder.Append("\",");

}

jsonBuilder.Remove(jsonBuilder.Length - 1, 1);

jsonBuilder.Append("},");

}

jsonBuilder.Remove(jsonBuilder.Length - 1, 1); jsonBuilder.Append("]");

jsonBuilder.Append("}");

return jsonBuilder.ToString();

}

private string DataTableJson(DataTable dt) {

JsonWriter writer = new JsonWriter(); JsonObject content = new JsonObject(); JsonArray Orders = new JsonArray(); JsonObject Order;

JsonObject OrderItem = new JsonObject();

for (int i = 0; i < dt.Rows.Count; i++) {

Order = new JsonObject();

for(int j =0;j<dt.Columns.Count;j++) {

Order.Add(dt.Columns[j].ColumnName, dt.Rows[i][j].ToString());

}

Orders.Add(Order);

}

content.Add(dt.TableName, Orders); content.Write(writer);

writer = new IndentedJsonWriter(); content.Write(writer);

return writer.ToString();

}

public bool IsReusable

{

get

{

return false;

}

}

}

}

更多相关推荐:
不同json数据格式之间的转换

待转换的json数据格式为quotidquot1quottextquotquot菜单quotquotchildrenquotquotidquot11quottextquotquot菜单1quotquotstat...

JavaScript 如何处理 php 返回json格式的数据

JavaScript如何处理php返回json格式的数据JavaScript如何处理php返回json格式的数据下面我们通过一个示例来说明假设php返回如下一个数组查看代码打印01arrarray02array...

labView中如何获取windows当前系统时间

labView中如何获取windows当前系统时间labview82入门到精通的PPT第4章里面有个练习是写一个VI获取当前系统时间并将其转换为字符串和浮点数完成效果如图我要怎么来获取当前系统的时间呢程序如下还...

WEB报表 Oracle数据库 SQL语句 性能优化 报表生成

WEB报表论文基于Web的报表生成技术优化及其应用中文摘要报表作为企业信息系统的重要组成部分是信息浏览分析打印的有力工具只有具备美观完善的报表企业信息系统才是一个完整的系统随着企业信息系统在Web上的应用越来越...

oracle基于索引的sql语句优化

基于索引的SQL语句优化之降龙十八掌123前言2总纲2降龙十八掌3第一掌避免对列的操作3第二掌避免不必要的类型转换4第三掌增加查询的范围限制4第四掌尽量去掉quotINquotquotORquot4第五掌尽量去...

优化sql语句提高oracle执行效率(34种方法)

1选择最有效率的表名顺序只在基于规则的优化器中有效Oracle的解析器按照从右到左的顺序处理FROM子句中的表名FROM子句中写在最后的表基础表drivingtable将被最先处理在FROM子句中包含多个表的情...

抓取oracle数据库耗费资源的sql语句

抓取oracle数据库耗费资源的sql语句oracle数据库连接业务系统而有些sql语句的执行严重影响了oracle的性能就如同mysql的慢查询一样mysql可以开启慢查询日志定位这些造成数据库性能下降的语句...

oracle sql语句优化

oraclesql语句优化1选择最有效率的表名顺序只在基于规则的优化器中有效ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名FROM子句中写在最后的表基础表drivingtable将被最先处理在F...

oracle中sql语句的数据优化

1基本的Sql编写注意事项尽量少用IN操作符基本上所有的IN操作符都可以用EXISTS代替不用NOTIN操作符可以用NOTEXISTS或者外连接替代Oracle在执行IN子查询时首先执行子查询将查询结果放入临时...

基于Oracle数据库上的SQL语句优化分析

操作符优化IN操作符用IN写出来的SQL的优点是比较容易写及清晰易懂这比较适合现代软件开发的风格但是用IN的SQL性能总是比较低的从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别ORAC...

oracle sql语句优化

oraclesql语句优化1选择最有效率的表名顺序只在基于规则的优化器中有效ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名FROM子句中写在最后的表基础表drivingtable将被最先处理在F...

js总结

javascript总结1eval函数首先来个最简单的理解eval可以将字符串生成语句执行和SQL的exec类似eval的使用场合是什么呢有时候我们预先不知道要执行什么语句只有当条件和参数给时才知道执行什么语句...

json数据格式和js操作json总结(3篇)