将回调结果写入页面

时间:2014-03-13 14:14:16

标签: c# javascript jquery json callback

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

Psuedo代码:(理想情况下)

  1. 用户与网页交互(在这种情况下,更改边界 在谷歌地图内)。
  2. 在bounds_changed上,javascript抓住了 绑定并通过JSON格式的jquery回调将它们发送给我的 C#代码。
  3. C#代码处理边界并以jSON的形式将searchResults返回给jpage进行操作的网页。
  4. 第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);
            }
    

    我错过了什么吗?我究竟做错了什么?你能指出我的写作方向吗?

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

    谢谢!

1 个答案:

答案 0 :(得分:0)

你需要在你的ajax帖子的success方法中实际使用JSON。

您可以使用JQuery来定位DOM节点,如下所示:

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