ashx 数据返回得不到数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ashx 数据返回得不到数据相关的知识,希望对你有一定的参考价值。

一个aspx页面,一个ashx页面,,怎么把ashx文件中的context.Response.Write("OK");传到前台的label显示啊?谢谢

public void ProcessRequest (HttpContext context)
string json = "OK";
context.Response.Write(json); 需要把这个到前台显示!!


前台脚本
<script type="text/javascript">
//

$(function ()
$("#txtContents").blur(function ()
$.post("Handler2.ashx", //要发送到的URL地址 以Post形式发送
"name": $("#txtContents").attr("value"), "user_id": $("#TextBox1").attr("value") , //发送的Json数据 _name 对应Home/getJsonData方法中的参数名字
function (data) //回调函数 参数data : 返回的json数据

l aert(data);
这里不弹出任何数据,貌似像是没返回任何数据一样
,
"json" //返回json类型数据
);
);
);

</script>

你的ajax请求中设定了返回数据类型为"json",这表示脚本预期的响应MIME type为text/json,并且致命的地方是,jQuery会将你的响应文本转换成json对象.而你的响应其实是一个plain text,并不符合json规范.这在某些浏览器中会抛出异常中断程序,所以你的success回调函数没有被执行.
如果你将响应处的代码改为"test":"OK",或者将页面的ajax dataType设置成"text",或者干脆去掉dataType参数(也就是"json" //返回json类型数据 这个参数)让jQuery智能猜测,你应该能顺利获取到响应值.

这只是其中一种不能顺利获取响应的情况,如果问题还未解决请追问.3q~_~
参考技术A tenderlitch说得很好了,就是这样的,ashx返回的数据格式不满足json键值对格式,当然返回不到正确的结果。1.将aspx中的返回数据类型json改为text,另外改一下alter拼写错误即可。2.也可以在ashx修改返回值格式。 参考技术B

JS代码改成这样就OK了:

$(function () 
    $("#txtContents").blur(function () 
        $.post("Handler2.ashx",
            
                "name": $("#txtContents").attr("value"),
                "user_id": $("#TextBox1").attr("value")
            ,
            function (data) 
                alert(data);
            );
    );
);

AJAX提交到Handler.ashx一般处理程序返回json数据-转

直接贴代码!我也测试通过! 一切看注释! 谢谢!

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

using System;
using System.Web;
using System.Text;

public class Handler : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        string id = "0";
        //判断提交方式
        if (context.Request.RequestType.ToLower() == "get")
        {
            id = context.Request.QueryString["id"];
        }
        else
        {
            id = context.Request.Form["id"];
        }
        
        string name = @"jinho\'s good \\"" you";
        /**
         * 今天暂时用手动创建个json字符串类型,其实.net中有
         * System.Runtime.Serialization.Json.DataContractJsonSerializer这个类来把
         * 实体对象转换为json字符串! 改天再用那种方式写个吧!
         * 自己也学习学习[更多关于json介绍!google一下多了是]
         * */
        StringBuilder sb = new StringBuilder("{");
        sb.Append("id:"+id);
        /*
         * 注意但属性值为字符串的时候需要有\'号或者"号[\'字符串\']
         * 当 参数 name 又含 有单引号或者双引号 就会出错了![截断了字符串]
         * 在这里sb.Append(",name:\'escape(" + name + ")\'"); 用js的escape也不行
         * context.Server.HtmlEncode();,context.Server.UrlEncode();也不行
         * 可以看看这里
         * escape("\'") = %27 可以在js用 unescape("\'") 就还原了
         * escape(""") = %22 嘿嘿,用这个方法也是我的无奈之举!
         * 谁有好的方法记得告诉我哦! 先谢谢了!
         * 问题已解决:http://www.cnblogs.com/jinho/archive/2010/05/07/1729586.html
         * */
        sb.Append(",name:\'" + name.Replace("\'", "%27").Replace("\\"", "%22") + "\'"); 
        sb.Append(",age:22");
        sb.Append("}");
        //输出 json 字符串
        context.Response.Write(sb.ToString());
        context.Response.End();
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }

}

 

 

<%@ Page Language="C#" %>

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

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>前台</title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:scriptmanager runat="server" ID="sm" />
    <script type="text/javascript">
        function ajaxFunction() {
            var xmlHttp;
            try {
                // Firefox, Opera 8.0+, Safari
                xmlHttp = new XMLHttpRequest();
            }
            catch (e) {

                // Internet Explorer
                try {
                    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch (e) {

                    try {
                        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    catch (e) {
                        alert("您的浏览器不支持AJAX!");
                        return false;
                    }
                }
            }
            return xmlHttp;
        }
</script>
    <script type="text/javascript">
        var xmlhttp = null;
        function loadJsonData() {
            xmlhttp = ajaxFunction();
            if (xmlhttp != null) {
                xmlhttp.onreadystatechange = state_Change;
                var data = "id=231";
                //把这两句注释,看看下面的POST提交方式
                xmlhttp.open("GET", "Handler.ashx?" + data, true);
                xmlhttp.send(null);
                /*
                xmlhttp.open("POST", "Handler.ashx", true);
                //如果使用POST提交 不设置这条语句,url页面 Request.Form["key"] 是取不到值的!
                //这句我也不知道为什么要设置,网上找到的![GET提交可以不设置,但需要把参数拼接到URL]
                xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                xmlhttp.send(data); //如果是post提交,需要把数据发送过去
                */
            }
            else {
                alert("Your browser does not support XMLHTTP.");
            }
        }
        function state_Change() {
            if (xmlhttp.readyState == 4) {// 4 = "loaded"
                if (xmlhttp.status == 200) {// 200 = "OK"
                    eval("var s = " + xmlhttp.responseText);
                    $get("divDisplay").innerHTML = "ID" + s.id + "Name:" + unescape(s.name) + "Age:" + s.age;
                }
                else {
                    alert("Error:" + xmlhttp.statusText);
                }
            }
        }
</script>

    <div>
    <input type="button" value="GetJson" onclick="loadJsonData();" />
    <div id="divDisplay"></div>
    </div>
    </form>
</body>
</html>

以上是关于ashx 数据返回得不到数据的主要内容,如果未能解决你的问题,请参考以下文章

AJAX提交到Handler.ashx一般处理程序返回json数据-转

ASP.NET 使用 ASHX 返回 JSON

Form表单只提交数据,页面不跳转,返回表单值

jquery 请求返回的几种方式

在数据 R 中找不到列名时返回文本

asp.net 返回json格式