2014-03-13 54 views
0

我想簡單地寫一些數據到我的網頁作爲回調的結果。一切工作到需要輸出回調結果的地步。服務器結果到網頁

客戶端:

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 obj。

目前,json obj被寫入頁面的唯一方法是如果我在沒有回調的情況下調用它(只是在頁面加載時調用它)。另外,在螢火蟲中,整個網頁來源看起來都是回傳的結果。我在發佈的結果中看到了我的json結果,但它也包含整個頁面的HTML。

此外,我似乎無法得到結果張貼到整個頁面的頁面。實際上,我可以通過簡單地取消註釋客戶端代碼中的那一點來將結果發佈到頁面,但它發佈了我的網站的副本,而不是我認爲我創建的實際結果...

我在想什麼?你如何在C#代碼中明確聲明返回到JS回調的結果是'結果'?

回答

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"); 
      } 
     }); 
    }); 
} 
+0

我試圖實現物品的例子,但processCallback我的新的公共方法不會被調用上回調。我懷疑這是關於如何'隱藏'我的課程是從頁面的代碼隱藏文件,因此url.com/processCallback DNE呈現頁面。是這種情況還是我做了其他不正確的事情? – yoyo