首页 新闻 赞助 找找看

Jquery 调用.ashx

1
悬赏园豆:50 [已解决问题] 解决于 2013-12-19 13:31

近期产品需要,搞了下web方面的东西,遇到一个问题:前台调用.ashx文件无反应!!!!

在页面里调用.ashx获取json文本,先把.ashx代码贴出来:

<%@ WebHandler Language="C#" Class="JsonHandler" %>

using System;
using System.Web;
using System.Text;
using System.Data;
/// <summary>
/// Json字符串处理
/// </summary>
public class JsonHandler : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        context.Response.Write(GetJsonString("",null));
        
    }
    /// <summary>
    /// 获取Json字符串
    /// </summary>
    /// <param name="dataTable"></param>
    /// <returns></returns>
    public string GetJsonString(string dataTable, Object DataBaseDal)
    {
        //use datbasedal  get data from database
        DataTable dt = new DataTable();
        dt.Columns.Add("列1");
        dt.Columns.Add("列2");
        dt.Columns.Add("列3");
        dt.Columns.Add("列4");
        dt.Columns.Add("列5");
        for (int i = 0; i < 11; i++)
        {
            dt.Rows.Add(DateTime.Now.Date, DateTime.Now.TimeOfDay, "t3", "t4", "t5");
        }
        var result = CreateJsonParameters(dt);
        return result.ToString();
    }
    public string CreateJsonParameters(System.Data.DataTable dt) 
    {
        StringBuilder JsonString = new StringBuilder();
        if (dt != null)
        {
            JsonString.Append("[");  //json串儿格式([])
            for (int i = 0; i < dt.Rows.Count; i++)  
            {  
                JsonString.Append("{ ");  
                for (int j = 0; j < dt.Columns.Count; j++)  
                {  
                    if (j < dt.Columns.Count - 1)  
                    {  
                        JsonString.Append(dt.Columns[j].ColumnName.ToString() 
                            + ":" + "\"" + dt.Rows[i][j].ToString() + "\",");  
                    }
                    else if (j == dt.Columns.Count - 1)
                    {
                        JsonString.Append(dt.Columns[j].ColumnName.ToString()
                            + ":" + "\"" + dt.Rows[i][j].ToString() + "\"");
                    }
                }  
                if (i == dt.Rows.Count - 1)  
                {  
                    JsonString.Append("} ");  
                }  
                else  
                {  
                    JsonString.Append("}, ");  
                }  
            }  
            JsonString.Append("]");  
        }
        else
        {
            JsonString.Append("未获取到查询字符串!");
        }
        return JsonString.ToString();
    }
    public bool IsReusable {
        get {
            return false;
        }
    }

}

直接在浏览器里是可以访问.ashx内容的。

 再贴前台调用代码:

<script type="text/javascript">
        $(document).ready(function (){
            $("#button1").click(function () {
                $.getJSON("demo_ajax_json.js",
                 null,
                 function (result) {
                     alert("test");
                     $.each(result, function (i, field) {
                         $("p").append(field + " ");
                     });
                 });
            });
        });
</script>

    <script type="text/javascript">
    $(document).ready(function () {
        $("#button2").click(function () {
            $.getJSON(
            "JsonHanlder.ashx",
                 null,
                 success:function(result)
            {
                     alert("test");
                     $.each(result, function (i, field) {
                         $("p").append(field + " ");
                     });
                 });
        });
    });
</script>

    <script type="text/javascript">
        $(document).ready(function () {
            $("#button3").click(function () {
                $.ajax({
                    type: "POST",
                    url: "../newWebSiteTest/JsonHandler.ashx",
                    data: data,
                    success: function (response) {
                        alert(response);
                       

                    }
                })  
            });
        });
</script>

button1点击后可以获取字符串,

button2,button3点击后都木反应啊,是我调用有错么各位,我是按照他们官网上示例改的啊,这三者不同的地方是button1获取的是js文件,button2通过getjson获取JsonHanlder.ashx内容,button3用ajax获取JsonHanlder.ashx文本。各位帮帮忙啊····

抓住青虫的主页 抓住青虫 | 初学一级 | 园豆:26
提问于:2013-11-08 15:12
< >
分享
最佳答案
0

getJSON ,你的接口返回的要JSON格式,你那个不是JSON格式。

第三个不行是因为你没有指定格式

给你个地址,我之前写的,有什么不行的可以交流  地址

收获园豆:50
|WinKi| | 小虾三级 |园豆:669 | 2013-11-08 15:31

谢谢回答,但是我JsonHanlder.ashx返回的内容是严格的K/V格式啊,图片可能太模糊了,这张是大图,这格式不对么?另外,不指定格式,直接alert是不可以的么?

抓住青虫 | 园豆:26 (初学一级) | 2013-11-08 15:41

@抓住青虫: 我说的有点错,你那个确实是JSON,但是不是string格式的,是object的。
你在success后面加error: function (Request) { alert(Request.responseText); }

|WinKi| | 园豆:669 (小虾三级) | 2013-11-08 15:43

@|WinKi|: 谢谢啊,我再试试,我把返回的字符串验证了下,确实格式有点问题。稍后解决了给分

抓住青虫 | 园豆:26 (初学一级) | 2013-11-08 16:28
其他回答(3)
0

是Jsonp

Toby Wei | 园豆:202 (菜鸟二级) | 2013-11-08 15:29

$.Jsonp()???

支持(0) 反对(0) 抓住青虫 | 园豆:26 (初学一级) | 2013-11-08 15:31

哥们,恕我愚钝,能明白点不··

支持(0) 反对(0) 抓住青虫 | 园豆:26 (初学一级) | 2013-11-08 15:32
0

建议安装httpwatchprofessional这个浏览器插件,查看一下有没有请求报文发送到服务器,以及发送的请求报文格式是否正确,调试这种程序的话就分两部分,1、数据能不能发过去,2、数据发过去以后,服务器端能接收到不能。

轻狂の书生 | 园豆:1042 (小虾三级) | 2013-11-09 18:39
0

看楼主用的是火狐浏览器,可以F12看下Ajax请求有没有发出,如果没有,那就是click事件没加上,如果有,那就再看返回的字符串格式是否正确

netqiang | 园豆:405 (菜鸟二级) | 2013-11-12 15:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册