将回调结果写入页面

Write Callback Result to Page

本文关键字:回调 结果      更新时间:2023-09-26

我一直在寻找几个小时试图找出如何写我的回调结果到我的网页。这是一个相当具体的问题,但我遇到的解决方案都没有实际效果。以下是详细信息:

Psuedo代码:(理想情况下)

  1. 用户与网页交互(在本例中,更改边界)在谷歌地图中)。
  2. 在bounds_changed时,javascript抓取并通过JSON格式的jquery回调将它们发送到myc#代码。
  3. c#代码处理边界,并以JSON的形式将searchResults返回给网页,由javascript操作。

步骤3的第二部分是故障点(其他一切都正常)。我似乎无法在回调完成时动态地编写结果。

相关代码如下:

发送消息从客户端到服务器:(这个工作,但只是为了完整)

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) {
                console.log("callback compelete");
            },
            error: function(error) {
                console.log("callback Error");
            }
        });
    });
}

页面加载时的服务器代码:(注意这不起作用[写searchResults])

        public Map_ResultsViewer_Beta(...)
        {
            ...
            //holds actions from page
            string payload = HttpContext.Current.Request.Form["payload"] ?? String.Empty;
            // See if there were hidden requests
            if (!String.IsNullOrEmpty(payload))
            {
                //temp: process the request //2do: make this dynamic
                string temp_AggregationId = CurrentMode.Aggregation;
                string[] temp_AggregationList = temp_AggregationId.Split(' ');
                Perform_Aggregation_Search(temp_AggregationList, true, Tracer);
                //NOTHING BELOW THIS REALLY WORKS, ignore the the 'placeholder' method of displaying the results, it was just one attempt.
                #region 
                // Start to build the response
                StringBuilder mapSearchBuilder = new StringBuilder();
                PlaceHolder MainPlaceHolder = new PlaceHolder();
                mapSearchBuilder.AppendLine("  ");
                mapSearchBuilder.AppendLine("     <script type='"text/javascript'"> ");
                mapSearchBuilder.AppendLine("     function processCallbackResult(){ ");
                if (!string.IsNullOrEmpty(HttpContext.Current.Session["SearchResultsJSON"].ToString()))
                {
                    mapSearchBuilder.AppendLine("     var searchResults=" + HttpContext.Current.Session["SearchResultsJSON"] + ";");
                }
                else
                {
                    mapSearchBuilder.AppendLine("     var searchResults; ");
                }
                mapSearchBuilder.AppendLine("     } ");
                mapSearchBuilder.AppendLine("     </script> ");
                mapSearchBuilder.AppendLine("  ");
                // Add this to the page
                Literal writeData = new Literal { Text = mapSearchBuilder.ToString() };
                MainPlaceHolder.Controls.Add(writeData);
                #endregion
            }
            else
            {
                //string temp_AggregationId = CurrentMode.Aggregation;
                //string[] temp_AggregationList = temp_AggregationId.Split(' ');
                //Perform_Aggregation_Search(temp_AggregationList, true, Tracer);
                HttpContext.Current.Session["SearchResultsJSON"] = "";
            }
        }

实际执行搜索:(这是有效的,只是为了完整性把它放在这里)

        public void Perform_Aggregation_Search(...)
        {
            //search the database for all items in all of the provided aggregations and merge them into one datatable
            List<DataTable> temp_Tables = new List<DataTable>();
            DataTable searchResults = new DataTable();
            foreach (string aggregationId in aggregationIds)
            {
                temp_Tables.Add(Database.Get_All_Coordinate_Points_By_Aggregation(aggregationId, Tracer));
            }
            foreach (DataTable temp_Table in temp_Tables)
            {
                searchResults.Merge(temp_Table);
            }
            //assign and hold the current search result datatable, from now on we will be using this as the base layer...
            HttpContext.Current.Session["SearchResults"] = searchResults;
            //call json writer with these results
            string searchResultsJSON = Create_JSON_Search_Results_Object(searchResults,Tracer);
            //send json obj to page and tell page to read it (via callback results)
            HttpContext.Current.Session["SearchResultsJSON"] = searchResultsJSON;
        }

创建JSON对象的代码:(这是有效的,只是为了完整性把它放在这里)

        public string Create_JSON_Search_Results_Object(...)
        {
            //take the search results from db query (incoming) and parse into JSON
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
            Dictionary<string, object> row = null;
            foreach (DataRow dr in searchResults.Rows)
            {
                row = new Dictionary<string, object>();
                foreach (DataColumn col in searchResults.Columns)
                {
                    row.Add(col.ColumnName.Trim(), dr[col]);
                }
                rows.Add(row);
            }
            //return JSON object
            return serializer.Serialize(rows);
        }

我错过什么了吗?我做错了什么?你能给我指一下写字的方向吗?

问题再次出现在将回调结果写入页面时。

谢谢!

您需要在您的ajax post的success方法中实际做一些JSON。

你可以使用JQuery来瞄准DOM节点,像这样:

$('.example').html(result);