近期产品需要,搞了下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文本。各位帮帮忙啊····
谢谢回答,但是我JsonHanlder.ashx返回的内容是严格的K/V格式啊,图片可能太模糊了,这张是大图,这格式不对么?另外,不指定格式,直接alert是不可以的么?
@抓住青虫: 我说的有点错,你那个确实是JSON,但是不是string格式的,是object的。
你在success后面加error: function (Request) { alert(Request.responseText); }
@|WinKi|: 谢谢啊,我再试试,我把返回的字符串验证了下,确实格式有点问题。稍后解决了给分
是Jsonp
$.Jsonp()???
哥们,恕我愚钝,能明白点不··
建议安装httpwatchprofessional这个浏览器插件,查看一下有没有请求报文发送到服务器,以及发送的请求报文格式是否正确,调试这种程序的话就分两部分,1、数据能不能发过去,2、数据发过去以后,服务器端能接收到不能。
看楼主用的是火狐浏览器,可以F12看下Ajax请求有没有发出,如果没有,那就是click事件没加上,如果有,那就再看返回的字符串格式是否正确