Javascript 执行了一个ajax请求。如何格式化返回的数据?

Javascript 执行了一个ajax请求。如何格式化返回的数据?,javascript,c#,jquery,asp.net,ajax,Javascript,C#,Jquery,Asp.net,Ajax,下面的ajax请求有效。然而,这并不理想。事实证明,HttpContext很难使用。Context.Response.Clear()完全不起任何作用 如何在没有额外信息的情况下将我想要的写入输出 此外,我希望此ajax请求直接访问RetrieveAddress类,但取消对URL参数的注释会导致HTTP 500错误。所以现在,ajax请求只访问代码隐藏(IsPostBack为false…) 让ajax访问一种方法的正确语法是什么 function showLocation(position

下面的ajax请求有效。然而,这并不理想。事实证明,HttpContext很难使用。Context.Response.Clear()完全不起任何作用

如何在没有额外信息的情况下将我想要的写入输出

此外,我希望此ajax请求直接访问RetrieveAddress类,但取消对URL参数的注释会导致HTTP 500错误。所以现在,ajax请求只访问代码隐藏(IsPostBack为false…)

让ajax访问一种方法的正确语法是什么

    function showLocation(position) {
        $.ajax({
            type: "POST",
            //url: "ThisLocation.aspx/RetrieveAddress",
            //contentType: "application/json; charset=utf-8",
            data: {
                latitude: position.coords.latitude,
                longitude: position.coords.longitude
            },
            //datatype: "JSON",
            success: function (msg) {
                address1 = document.getElementById('address');

                //my illegitimate hack to retrieve only what I inserted
                address1.value = msg.substr(0, msg.indexOf('\n'));
            }
        });
    }
这是代码隐藏。到目前为止,有效的是Page_Load方法。我无法使RetrieveAddress方法工作

public partial class ThisLocation : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Common.CheckAnyLogin();

        //if we're coming from ajax request
        if (Context.Request["latitude"] != null && Context.Request["longitude"] != null)
        {
            double lat;
            double long;
            lat = Double.Parse(Context.Request["latitude"].ToString());
            long = Double.Parse(Context.Request["longitude"].ToString());

            //can i access this session from html after initial load?
            Session["MyLocAddress"] = GetAddress.GetAddressAll(lat, long);
            // Why doesn't this actually clear anything?
            Context.Response.Clear();
            Context.Response.Write(Session["MyLocAddress"].ToString());
        }
    }

    public static string RetrieveAddress(double latitude, double longitude)
    {
        return GetAddress.GetAddressAll(latitude, longitude);
    }
}

由于使用POST到ASPX页面,因此需要将该方法作为请求参数包含,而不是URL的一部分。在Ajax请求中:

data: {
            latitude: position.coords.latitude,
            longitude: position.coords.longitude,
            method: "RetrieveAddress"
        }
然后在代码隐藏中:

if (Context.Request["method"] == "RetrieveAddress")
{
    Callyourmethod();
}

笨重的。这就是我使用web服务而不是ASPX页面的原因。使用web服务,您可以直接从Ajax访问这些方法。

因为您使用POST到ASPX页面,所以需要将该方法作为请求参数,而不是URL的一部分。在Ajax请求中:

data: {
            latitude: position.coords.latitude,
            longitude: position.coords.longitude,
            method: "RetrieveAddress"
        }
然后在代码隐藏中:

if (Context.Request["method"] == "RetrieveAddress")
{
    Callyourmethod();
}
笨重的。这就是我使用web服务而不是ASPX页面的原因。使用web服务,您可以直接从Ajax访问这些方法。

您缺少的响应。End(),从技术上讲,这应该可以

protected void Page_Load(object sender, EventArgs e)
{
      Response.Clear();
      Response.Write("Hello");
      Response.End();
}
此外,要直接访问该方法,必须使用[WebMethod] 属性为

[WebMethod]
public static string RetrieveAddress(double latitude, double longitude)
{
     return GetAddress.GetAddressAll(latitude, longitude);
}
您缺少响应。End(),从技术上讲,这应该可以工作

protected void Page_Load(object sender, EventArgs e)
{
      Response.Clear();
      Response.Write("Hello");
      Response.End();
}
此外,要直接访问该方法,必须使用[WebMethod] 属性为

[WebMethod]
public static string RetrieveAddress(double latitude, double longitude)
{
     return GetAddress.GetAddressAll(latitude, longitude);
}

服务器上不再存在您的页面。您应该使用一个单独的ASHX处理程序,并发送JSON。如果我现在能够访问codebehind,那就不可能是真的。但是,一旦我进入代码隐藏,我如何格式化成功结果?现在,我在返回中得到了整个html,当我只需要一行代码时,您正在访问一个全新的页面实例,就好像您打开了另一个选项卡一样。这不是您想要的。服务器上不再存在您的页面。您应该使用一个单独的ASHX处理程序,并发送JSON。如果我现在能够访问codebehind,那就不可能是真的。但是,一旦我进入代码隐藏,我如何格式化成功结果?现在,我在返回中得到了整个html,当我只需要一行代码时,您正在访问一个全新的页面实例,就好像您打开了另一个选项卡一样。那不是你想要的。嗯,好主意。然后如何格式化结果?事实上,当我只需要一行时,我在返回中得到了整个html。还有,会更好吗?Response.Clear()应该可以工作。您可以使用像Newtonsoft这样的JSON序列化程序来格式化结果,或者只是:response.write(“{Text:\“MyAddress”\”)或沿着这些行的某个内容尝试在Clear()之后运行response.End()?在我的response.write(“address”)之前抛出response.End()之后,现在返回的消息是““.Hmm好主意。然后如何格式化结果?事实上,当我只需要一行时,我会在返回中得到整个html。而且,会更好吗?Response.Clear()应该可以工作。您可以使用像Newtonsoft这样的JSON序列化程序来格式化结果,或者只需:Response.write({Text:\“MyAddress”\”))或沿着这些行的某个内容如果您尝试在Clear()之后运行Response.End()?在我的Response.write(“address”)之前抛出Response.End()之后,现在返回的消息是“”。