2011-06-15 154 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

相关问题