Javascript 执行了一个ajax请求。如何格式化返回的数据?
下面的ajax请求有效。然而,这并不理想。事实证明,HttpContext很难使用。Context.Response.Clear()完全不起任何作用 如何在没有额外信息的情况下将我想要的写入输出 此外,我希望此ajax请求直接访问RetrieveAddress类,但取消对URL参数的注释会导致HTTP 500错误。所以现在,ajax请求只访问代码隐藏(IsPostBack为false…) 让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
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()之后,现在返回的消息是“”。