2016-06-27 58 views
0

加載我的頁面後,我想發出Web請求,以便可以通過JavaScript訪問其響應。我寫了一個向服務器發出請求的c#類。這個類由我的MVC應用程序中的控制器調用。我可以確認客戶端類正常運行&返回JSON的字符串表示形式。ASP.Net MVC - 在頁面加載中使用WebResponse作爲JavaScript變量

我的問題是這樣的。我應該如何調用控制器,以便在JavaScript中使用響應? @ http.Action只是簡單地返回一個包含整個頁面html的txt文件,其中包含響應的地方,我打電話。我想代之以將此存儲爲變量並保持初始索引視圖。

代碼波紋管已被修改爲只包含必需品。

控制器

public ActionResult getMeterConfig() { 
     string scheme = "http"; 
     string host = "*****"; 
     int port = ****; 
     string dataset = "*****"; 
     string db = "****"; 
     string method = "GET"; 

     var request = new client(); 
     request.setProps(scheme, host, port, dataset, db, method); 
     request.makeRequest(); 
     var response = request.getResponse(); 

     return Json (response,JsonRequestBehavior.AllowGet); 


    } 

然後調用在頁面加載控制器:

$(window).load(function(){ 
    var json = @Html.Action("actionName","contollerName"; 
}); 

EDIT澄清

伊夫改變的JavaScript爲:

$(window).load(function() { 
     $.get('@Html.Action("getMeterConfig", "GetMeterConfig")', function (response) { 
      var meters = response; 
     }); 
    }); 

這將返回一個名爲Index.json的下載,而不是將響應存儲在變量計中。

enter image description here

爲了使這更絕的以.json文件內容如下......它包括我的索引視圖HTML並替換@ Html.Action(「getMeterConfig」,「GetMeterConfig」)與實際響應。

enter image description here

回答

1

你會做一個AJAX請求到控制器的動作。假設jQuery的,因爲ASP.NET MVC附帶了它:

$(window).load(function(){ 
    $.get('@Url.Action("getMeterConfig", "contollerName")', function (response) { 
     var json = response; 
    }); 
}); 

所以,當你的客戶端頁面加載,即客戶端代碼將使這個getMeterConfig動作單獨的請求。該請求返回的JSON將在回調函數中可用。 (我把這個變量命名爲response,但是你可以隨心所欲地調用它。)

+0

這樣做很有道理!我應用了這些建議,但仍然得到一個名爲index.json的下載幷包含整個頁面的標記。例如:它包含html,head,腳本標籤,主體等。然後它將腳本添加到我們聲明var json = response的腳本中。有什麼想法嗎?是因爲控制器正在返回json嗎? – LCaraway

+0

@LCaraway:那麼,getMeterConfig返回的響應是什麼?如果第三方頁面正在返回HTML,並且您返回了他們返回的任何內容,那麼您還將返回HTML。 – David

+0

電話打到的服務是我們管理的API。它也包含的HTML是我家庭控制器上索引視圖的html。使用小提琴手我可以確認只有JSON數組正在被返回。例子[{object 1},{object 2}]這是預期的。 – LCaraway