Jquery调用从ashx文件返回的jsonp格式的数据处理实例

开发环境:vs2010+jquery-1.4.min.js

解决问题:网上代码比较少,好多调试不通,返回数据不用json而用jsonp主要考虑解决跨域问题

开发步骤:打开VS2010,新建一web站点,保存位置选择D:\Website1;添加新项,选择一般处理程序,命名cmdHandler.ashx;添加新项,选择HTML页,命名为testAshx.htm;网上下载jquery-1.4.min.js拷贝到web站点中

项目相关网站源码和运行截图如下:

1、testAshx.htm代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Jquery调用ashx文件返回的jsonp格式数据实例</title>
<script
type="text/javascript"
src="jquery-1.4.min.js"></script>
</head>
<body>
   
<div id="Div1"> </div>
    <div id="Div2">
</div>
    <div id="Div3">
</div>
    <div id="Div4">
</div>
    <script type="text/javascript"
>
       
//回调函数1
        function
success_jsonpCallback11(data)
{
            var $ul
=
$("<ul></ul>");
           
$.each(data, function (i, v)
{
               
$("<li/>").text(v["id"] + " " +
v["name"]).appendTo($ul)
           
});
           
$("#Div2").html($ul);
       
}
       
//回调函数2
        function
success_jsonpCallback22(data)
{
            var $ul
=
$("<ul></ul>");
           
$.each(data, function (i, v)
{
               
$("<li/>").text(v["OrderID"] + " " +
v["CustomerID"]).appendTo($ul)
           
});
           
$("#Div4").html($ul);
       
}
        //网页特效加载完成后执行下面代码
       
$(document).ready(function ()
{
           
//读取Ashx文件中直接返回的字符串
           
$.ajax({
               
url:
‘cmdHandler.ashx‘,
               
data: { StatusCode: 1
},
               
dataType:
"jsonp",
               
jsonp:
"jsonpcallback",
               
success: function (data)
{
                   
var $ul =
$("<ul></ul>");
                   
$.each(data, function (i, v)
{
                       
$("<li/>").text(v["id"] + " " +
v["name"]).appendTo($ul)
                   
});
                   
$("#Div1").html($ul);
               
}
           
});
           
//读取Ashx文件中直接返回的字符串带回调函数名称
           
$.ajax({
               
type:
"get",
               
async:
false,
               
url:
"cmdHandler.ashx",
               
data: { StatusCode: 1
},
               
dataType:
"jsonp",
               
jsonp: "jsonpcallback",
//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback) 
               
jsonpCallback: "success_jsonpCallback1",
//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名 
               
success: function (json)
{
                   
//在此之前若没有定义回调函数success_jsonpCallback1则执行下面的代码
                   
var $ul =
$("<ul></ul>");
                   
$.each(json, function (i, v)
{
                       
$("<li/>").text(v["id"] + " " +
v["name"]).appendTo($ul)
                   
});
                   
$("#Div2").html($ul);
               
},
               
error: function ()
{
                   
alert(‘fail‘);
               
}
           
});
           
//读取Ashx文件中返回的数据库字符串
           
$.ajax({
               
type:
"get",
               
async:
false,
               
url:
"cmdHandler.ashx",
               
data: { StatusCode: 2
},
               
dataType:
"jsonp",
               
jsonp:
"jsonpcallback",
               
success: function (json)
{
                   
var $ul =
$("<ul></ul>");
                   
$.each(json, function (i, v)
{
                       
$("<li/>").text(v["OrderID"] + " " +
v["CustomerID"]).appendTo($ul)
                   
});
                   
$("#Div3").html($ul);
               
},
               
error: function ()
{
                   
alert(‘fail‘);
               
}
           
});
           
//读取Ashx文件中返回的数据库字符串带回调函数名称
           
$.ajax({
               
type:
"get",
               
async:
false,
               
url:
"cmdHandler.ashx",
               
data: { StatusCode: 2
},
               
dataType:
"jsonp",
               
jsonp: "jsonpcallback",
//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback) 
               
jsonpCallback: "success_jsonpCallback2",
//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名 
               
success: function (json)
{
                   
//在此之前若没有定义回调函数success_jsonpCallback2则执行下面的代码
                   
var $ul =
$("<ul></ul>");
                   
$.each(json, function (i, v)
{
                       
$("<li/>").text(v["OrderID"] + " " +
v["CustomerID"]).appendTo($ul)
                   
});
                   
$("#Div4").html($ul);
               
},
               
error: function ()
{
                   
alert(‘fail‘);
               
}
           
});
            /*
回调函数写在末尾时候不起作用
           
function success_jsonpCallback(data)
{
               
alert("测试成功");
           

           
*/
   
});
</script>
</body>
</html>

2、cmdHandler代码如下:

<%@ WebHandler Language="C#" class="cmdHandler" %>

using System;
using System.Web;
//添加引用
using System.Data;
using
System.Data.SqlClient;
using System.Text;

public class cmdHandler : IHttpHandler {

public void ProcessRequest(HttpContext
context)
    {
       
context.Response.ContentType =
"text/plain";
        string StatusCode =
context.Request.QueryString["StatusCode"];
       
switch (StatusCode)
       
{
            case
"1"://返回测试用的组合字符串
               
context.Response.Write(getFormatString(context));
               
break;
           
case
"2"://返回查询数据库得到的组合字符串
               
context.Response.Write(GetDbString(context));
               
break;
        }
   
}
    #region 测试用的组合字符串
    public string
getFormatString(HttpContext context)
   
{
        string strReturn =
"";
        string jsonp =
context.Request["jsonpcallback"];
       
string str =
"[{\"id\":\"1\",\"name\":\"张三\"},{\"id\":\"2\",\"name\":\"李四\"}]";
       
strReturn = jsonp + "(" + str +
")";
        return
strReturn;
    }
    #endregion

#region 查询数据库得到组合字符串
    public string
GetDbString(HttpContext context)
   
{
        string strReturn =
"";
        string strConn =
"server=.;database=northwnd;uid=sa;pwd=123456;";//数据库连接字符串
       
string strFun =
context.Request["jsonpcallback"];//传递参数
       
StringBuilder strJsonData = new StringBuilder();//拼接json所有格式
       
StringBuilder strJsonMsgData = new
StringBuilder();//拼接json内容
        string
sqlText = "select top 3 * from
Orders";//查询数据表语句
        DataSet ds = new
DataSet();
        SqlConnection
mySqlConnection = new
SqlConnection();
       
mySqlConnection.ConnectionString =
strConn;
       
try
       
{
           
mySqlConnection.Open();
           
SqlCommand mySqlCommand = new
SqlCommand();
           
mySqlCommand.CommandText =
sqlText;
           
mySqlCommand.Connection =
mySqlConnection;
           
SqlDataAdapter da = new
SqlDataAdapter(mySqlCommand);
           
da.Fill(ds);
           
DataTable dt =
ds.Tables[0];
           
if (dt.Rows.Count >
0)
           
{
               
strJsonData.AppendFormat("{0}([", strFun);//json
begin
               
foreach (DataRow row in
dt.Rows)//得到行集合
               
{
                   
strJsonMsgData.Append("{\"OrderID\"" + ":" + "\"" + row["OrderID"].ToString() +
"\"" + ",\"CustomerID\"" + ":" + "\"" + row["CustomerID"].ToString() + "\"}" +
",");
               
}
               
strJsonData.Append(strJsonMsgData.ToString().TrimEnd(‘,‘));
               
strJsonData.Append("])");//json end

strReturn =
strJsonData.ToString();
           
}
           
else
           
{
               
strJsonData.AppendFormat("{0}([", strFun);//json
begin
               
strJsonData.Append("])");//json
end
               
strReturn =
strJsonData.ToString();
           
}
       
}
       
catch
       
{
       
}
       
finally
       
{
           
mySqlConnection.Close();
       
}
        return
strReturn;
    }
    #endregion

public bool IsReusable
   
{
       
get
       
{
            return
false;
        }
   
}

}

3、jquery-1.4.min.js文件不贴代码了,到http://www.codesocang.com自己下载,也可以使用更高版本的jquery.js文件

4、IE和火狐运行截图如下:

文章来源:http://www.codesocang.com/jiaocheng/js/7701.html

Jquery调用从ashx文件返回的jsonp格式的数据处理实例,布布扣,bubuko.com

时间: 2024-11-08 19:23:26

Jquery调用从ashx文件返回的jsonp格式的数据处理实例的相关文章

jquery訪问ashx文件演示样例

.ashx 文件用于写web handler的..ashx文件与.aspx文件类似,能够通过它来调用HttpHandler类,它免去了普通.aspx页面的控件解析以及页面处理的过程.事实上就是带HTML和C#的混合文件. .ashx文件适合产生供浏览器处理的.不须要回发处理的数据格式.比如用于生成动态图片.动态文本等内容.非常多须要用到此种处理方式.此文档提供一个简单的调用ashx文件的Demo,并贴出重要文件的源代码. 下面为Demo中Login.ashx文件里的源代码: public cla

jquery ajaxform上传文件返回不提示信息的问题

在使用jquery的ajaxform插件进行ajax提交表单并且上传文件的时候,返回类型datatype :json但是后台通过写出一个json对象后,在执行完以后没有进入success函数,而是直接弹出一个下载窗口,将json串当下载来处理了.后来发现解决方法是,不能把json串以json的形式写出来,而是以"text/html"的格式,并把json串放到textarea标签中. 例如: response.setContentType("text/html;charaset

JS 对java返回的json格式的数据处理

var dataObj=eval("("+res+")"); alert(dataObj.billBuy) //res是如下的数据 {"billBuy":"1001BRNO1102160002","stkid":"","timeBk":"","timeBuy":"","typeBuy":&

ashx文件结合ajax使用(返回json数据)

ashx文件返回json数据: public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string userName = string.Empty; string msg = "{{\"code\":\"{0}\",\"msg\":\"{1}\"}}";

[转]jQuery调用ASPX返回json

本文转自:http://www.cnblogs.com/fire-phoenix/archive/2009/11/13/1614146.html 本文介绍如何在ASP.NET(ASP.NET/AJAX)里使用基于JQuery的AJAX技术.(源代码下载见最后) 在使用JQuery前,请到www.jquery.com下载最新版本的js代码,然后再代码里使用 <script src="_scripts/jQuery-1.3.2.js" type="text/javascri

jquery访问ashx文件示例

转自原文jquery访问ashx文件示例 .ashx 文件用于写web handler的..ashx文件与.aspx文件类似,可以通过它来调用HttpHandler类,它免去了普通.aspx页面的控件解析以及页面处理的过程.其实就是带HTML和C#的混合文件. .ashx文件适合产生供浏览器处理的.不需要回发处理的数据格式,例如用于生成动态图片.动态文本等内容.很多需要用到此种处理方式.此文档提供一个简单的调用ashx文件的Demo,并贴出关键文件的源码. 以下为Demo中Login.ashx文

类型:Ajax;问题:ajax调用ashx参数获取不到;结果:ashx文件获取$.ajax()方法发送的数据

ashx文件获取$.ajax()方法发送的数据 今天在使用Jquery的ajax方法发送请求时,发现在后台中使用ashx文件无法接收到ajax方法中传递的参数,上网查了一下原因后发现了问题所在,原来是我在$.ajax方法中指明了"contentType: 'application/json; charset=utf8'",所以才导致了在ashx文件中处理请求时无法获取传递到服务器端的参数, 正确的写法如下: 1 $.ajax({ 2 url: '/Handler1.ashx?operF

jQuery调用WebService返回JSON数据

相信大家都比较了解JSON格式的数据对于ajax的方便,不了解的可以从网上找一下这方面的资料来看一下,这里就不多说了,不清楚的可以在网上查一下,这里只说一下因为参数设置不当引起的取不到返回值的问题. 在用jQuery调用WebService的时候,它contentType默认为 以下是WebService服务端的代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.W

ASP.net jQuery调用webservice返回json数据的一些问题

之前寒假时,试着使用jQuery写了几个异步请求demo, 但是那样是使用的webform普通页面,一般应该是用 webservice 居多. 最近写后台管理时,想用异步来实现一些信息的展示和修改, 这是第一次真正的在实际中运用ajax,卡了一个小时才做好简单的信息展示. 在这之间遇到了两个问题.写下来分享给大家,也加深一下自己的印象. 有错误的地方还请大神指出. 前端js代码: 1 <script type="text/javascript"> 2 $(function