2011-06-15 147 views
1

我有一個MVC 3的網絡應用程序,我需要通過JavaScript從Web窗口應用程序訪問一個動作。從另一個應用程序通過javascript訪問MVC動作

我的行動返回一個Json的結果,我已經檢查工作得很好。然而,當使用另一個應用程序的javascript訪問它時,我可以看到它達到了我的操作,完成了所有工作,返回了我的數據,但是jquery函數給我提供了錯誤200並且沒有數據。

例子: 我的MVC操作:

public ActionResult GetData(int categoryId) 
{ 
    var listofSeries = new List<string> 
       { 
        "foo1", 
        "foo2", 
        "foo3" 
       }; 
    return Json(listofSeries, JsonRequestBehavior.AllowGet); 
} 

這將返回我:["foo1","foo2","foo3"]

通常情況下,我的JavaScript函數用於查詢數據庫和找回數據的Highcharts圖表,但我有與這種例子相同的問題。

<script type="text/javascript"> 
    $(document).ready(function() { 
     var foo = getData(9); 
    }); 

    function getData(categoryId) { 
      var results; 

      $.ajax({ 
       type: 'POST', 
       url: 'http://localhost:xxxx/Home/GetData', 
       //contentType: "application/json; charset=utf-8;", 
       async: false, 
       data: { "categoryId": categoryId }, 
       dataType: "json", 
       success: function (data) { 
        console.log("results: " + data); 
        results = data; 
       } 
      }); 

      return results; 
     } 
</script> 

有了這個,我得到:

http://localhost:63418/Home/GetData?categoryId=9 200 OK 
results: null 

如果我添加的contentType,我甚至不能看到函數Firebug控制檯運行時,所有我看到的是results: null。當我刪除它,但我得到上面的錯誤。

我被告知它可能不可行,因爲「跨站腳本」。而是讓我的JavaScript函數調用web服務(或處理程序,但我還沒弄清楚如何使其中一個)然後調用我的動作,將數據返回給服務,然後服務將數據返回給javascript 。

但是現在我在嘗試連接到我的webservice時遇到415 Unsupported Media Type錯誤消息。

我IWebService.cs:

[ServiceContract] 
    public interface IWebService 
    { 
     [OperationContract] 
     [WebInvoke(ResponseFormat = WebMessageFormat.Json, Method = "POST")] 
     void GetData(int mileId); 
    } 

我WebService.svc:

public void GetData(int categoryId) 
{ 
    string url = "http://localhost:63418/Home/GetWoWData?categoryId=" + categoryId; 
    WebRequest wr = WebRequest.Create(url); 
    WebResponse response = wr.GetResponse(); 
} 

我還沒有返回任何東西,它甚至不會去這個功能。給我415錯誤信息。

如果我改變的contentType爲「text/xml」的我得到一個錯誤400

,我真的很喜歡這個工作,而無需使用web服務,並弄清楚爲什麼我得到一個錯誤200 OK時,我可以看到正在運行的動作,但如果這是不可能的,任何想法爲什麼web服務不工作?

謝謝。

+0

此外,我知道我沒有在這個例子中使用categoryId,儘管作爲參數傳遞它。但我確實在我的應用程序的正常版本中使用它。 – LanFeusT 2011-06-15 17:16:23

+0

爲什麼你的函數在你的文檔中準備好了?可能不是問題,但似乎也不是一個好主意。 你也錯過了;這裏:var foo = getData(9) – Patricia 2011-06-15 17:24:07

+0

The;失蹤是在這裏輸入它的錯誤。我將這個功能移到了外面,問題仍然存在。我糾正了主要帖子。謝謝。 – LanFeusT 2011-06-15 17:35:59

回答

0
 string url = "http://localhost:63418/Home/GetWoWData?categoryId=" + categoryId; 
     WebRequest wr = WebRequest.Create(url); 
     wr.Credentials = CredentialCache.DefaultNetworkCredentials; // uses current windows user 
     var response = (HttpWebResponse)wr.GetResponse(); 

我只記得我有這篇文章,並在前一段時間找到了解決方案。它通過添加憑證(在我的情況下是當前的Windows用戶)並獲得響應作爲HttpWebResponse解決。

0

200讓我覺得一切工作正常,但IE瀏覽器正在使用緩存的結果,我以前遇到過這個問題與IE瀏覽器。嘗試添加:

$.ajaxSetup({ 
    // Disable caching of AJAX responses */ 
    cache: false 
}); 

這將使它追加一個隨機參數,並且會阻止IE被愚蠢。

+0

不幸的是,我用Firefox運行它。無論如何,我補充道,但同樣的問題。錯誤200. – LanFeusT 2011-06-15 18:09:44

+0

嗯,可能仍然值得一試。 – Patricia 2011-06-15 18:16:07

相關問題