开发环境: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格式的数据处理实例的更多相关文章

  1. jquery訪问ashx文件演示样例

    .ashx 文件用于写web handler的..ashx文件与.aspx文件类似,能够通过它来调用HttpHandler类,它免去了普通.aspx页面的控件解析以及页面处理的过程.事实上就是带HTM ...

  2. jquery调用spring mvc接口返回字符串匹配

    背景:有个增删改页面,用jquery祭出ajax异步调用接口,spring mvc响应对象是个json字符串,jquery根据响应结果判断,如果删除成功给出提示.那么问题来了,接口里响应的字符串怎么匹 ...

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

    在使用jquery的ajaxform插件进行ajax提交表单并且上传文件的时候,返回类型datatype :json但是后台通过写出一个json对象后,在执行完以后没有进入success函数,而是直接 ...

  4. 在thinkphp5.0中调用ajax时, 返回的JSON 格式数据在html前台不能用时

    在thinkphp5.0中调用ajax时,如果控制器返回的数据为json格式,视图层接收到返回值即为json格式的数据,此时应该把 JSON 文本转换为 JavaScript 对象,方便调用.具体代码 ...

  5. 关于jquery js读取excel文件内容 xls xlsx格式 纯前端

    附带参考:http://blog.csdn.net/gongzhongnian/article/details/76438555 更详细导入导出:https://www.jianshu.com/p/7 ...

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

    var dataObj=eval("("+res+")"); alert(dataObj.billBuy) //res是如下的数据 {"billBuy ...

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

    ashx文件返回json数据: public void ProcessRequest(HttpContext context) { context.Response.ContentType = &qu ...

  8. Jquery跨域请求php数据(jsonp)

    Jquery跨域请求php数据 我们一般用到ajax的时候是在同服务器下,一般情况下不会跨域,但有时候需要调用其他域名或ip下的数据的时候,遇到跨域请求数据的时候. 今天在工作中碰到javascrip ...

  9. 自己遇到的ajax调用ashx文件无法获取返回值的一种情况

    无法获取返回值的ashx文件大致如下: public void ProcessRequest (HttpContext context) { context.Response.ContentType ...

随机推荐

  1. Eclipse can't install updates

    trying to update eclipse but after downloading updates i always get an error dialog saying: An error ...

  2. 检查string是否为double

    之前写的方法,使用try catch来处理 如果能捕获异常就说明问题 public bool CheckLegal() { double number; bool flag = true; try { ...

  3. Windows Azure 上的 Symfony,适用于 PHP 开发者的强大组合

     发布于 2014-06-13 作者 陈 忠岳 Symfony 是针对 PHP 开发者的流行开源 Web 应用框架.现在,您可以更轻松地在 Windows Azure 上使用它,这都归功于 Ben ...

  4. CF -- 414A

    #include<iostream> #include<cstdio> #include<cstring> using namespace std; int mai ...

  5. Java新手入门必须掌握的30个基本概念

    今天给大家推荐的文章是有关Java基本概念的,掌握好这些基本概念对学习J2SE.J2EE.J2ME都很重要,也能更好地理解Java的精髓,初学者要注意啦! ▶Java概述: 目前Java主要应用于中间 ...

  6. Minimum Window Substring &&& Longest Substring Without Repeating Characters 快慢指针,都不会退,用hashmap或者其他结构保证

    1 public class Solution { public static int lengthOfLongestSubstring(String s) { char[] arr = s.toCh ...

  7. jQuery dataTables 网格

    对于服务器来说,可以通过请求参数来获得当前的操作信息. 类型 名称 说明 int iDisplayStart 显示的起始索引 int iDisplayLength 显示的行数 int iColumns ...

  8. lfs遇到的一些问题--后续阶段

    1.安装GPM-1.20.7,make install出错: prog/display-buttons.c:39:57: 致命错误:gpm.h:没有那个文件或目录 #include <gpm.h ...

  9. ACM1229_还是A+B(求A的第K位的数公式:A%((int)(pow(10,K)))

    #include<stdio.h> #include<math.h> int main() { int A,k,B,sum,c,d; while(scanf("%d% ...

  10. Closure Compiler(封闭编辑器), Closure Inspector, Closure Templates, 封闭图书馆(Closure Library) Google- 摘自网络

    谷歌日前宣布,将自己开发者使用的一系列工具对外开放.这些工具曾用来开发谷歌的主要产品,包括Gmail.谷歌文档(Google Docs)和谷歌地图(Google Maps). 第一个工具叫做Closu ...