我试图通过回调简单地将一些数据写入我的网页。一切正常,直到我需要输出回调的结果。
客户端:
function toServer(data) {
var dataPackage = data + "~";
jQuery('form').each(function () {
document.getElementById('payload').value = JSON.stringify({ sendData: dataPackage });
$.ajax({
type: "POST",
async: true,
url: window.location.href.toString(),
data: jQuery(this).serialize(),
success: function (result) {
//this does not work because it just puts an entire source code copy of my site in there instead...
//document.getElementById('searchResults').value = result
console.log("callback compelete");
},
error: function(error) {
console.log("callback Error");
}
});
});
}
服务器端:(在页面加载时)
//holds actions from page
string payload = HttpContext.Current.Request.Form["payload"] ?? String.Empty;
// See if there were hidden requests (callbacks)
if (!String.IsNullOrEmpty(payload))
{
string temp_AggregationId = CurrentMode.Aggregation;
string[] temp_AggregationList = temp_AggregationId.Split(' ');
Perform_Aggregation_Search(temp_AggregationList, true, Tracer);
}
else
{
HttpContext.Current.Session["SearchResultsJSON"] = "";
}
服务器端代码的其余部分正常工作,只处理传入的解析并执行数据库搜索,然后将搜索结果解析为JSON对象。
目前,json obj写入页面的唯一方法是在没有回调的情况下调用它(只在页面加载时调用它)。另外,在firebug中,看起来整个页面源都是作为'结果发回的。回调。我确实在发布的结果中看到了我的json结果'结果'但它也包含整个页面HTML。
此外,我似乎无法将结果发布到页面上,这是重点。实际上,我可以通过简单地在客户端代码中取消注释该位来将结果发布到页面,但它会发布我的网站的副本而不是我认为我创建的实际结果...
我错过了什么?你如何在C#代码中明确说明返回JS回调的内容为'结果'?
答案 0 :(得分:0)
您获得了整个页面,因为您正在向ASP.NET页面发出请求。事实上,您要求改变您正在查看的相同页面。如果您提交表单,服务器将返回它将返回的内容。
要获取JSON数据,您需要创建一个Web方法来处理您的请求。阅读this article,它会对您有所帮助。它向您展示了如何返回简单文本,但您也可以返回JSON。有关此MSDN article的信息。
最后,为了确保jQuery将服务器响应解析为JSON,请更改您的请求并明确指出:
function toServer(data) {
var dataPackage = data + "~";
jQuery('form').each(function () {
document.getElementById('payload').value = JSON.stringify({ sendData: dataPackage });
$.ajax({
type: "POST",
async: true,
url: window.location.href.toString(),
data: jQuery(this).serialize(),
dataType: 'json',
success: function (result) {
//this does not work because it just puts an entire source code copy of my site in there instead...
//document.getElementById('searchResults').value = result
console.log("callback compelete");
},
error: function(error) {
console.log("callback Error");
}
});
});
}