微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过javascript从另一个应用程序访问MVC Action

如何解决通过javascript从另一个应用程序访问MVC Action

| 我有一个MVC 3网络应用程序,该应用程序具有一个Action,我需要通过javascript从Webform应用程序访问该Action。 我的动作返回一个Json结果,我检查过该结果很好。但是,当从另一个应用程序中使用javascript访问它时,我可以看到它达到了我的目的,完成了所有工作,返回了我的数据,但是jquery函数然后给我一个错误200并且没有数据。 例: 我的MVC动作:
public ActionResult GetData(int categoryId)
{
   var listofSeries = new List<string>
               {
                   \"foo1\",\"foo2\",\"foo3\"
               };
   return Json(listofSeries,JsonRequestBehavior.AllowGet);
}
这将返回我:
[\"foo1\",\"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控制台中正在运行的功能,我只看到了4。当我删除它时,我却收到上面的错误。 有人告诉我,由于“跨站脚本”,它可能不可行。而要让我的javascript函数调用一个Web服务(或处理程序,但我还没有弄清楚如何使之成为其中一个),然后该Web服务将调用我的操作,将数据返回给该服务,然后该服务将该数据返回给javascript。 但是,现在尝试连接到我的Web服务时,出现415不支持媒体类型错误消息。 我的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服务为何无法工作的想法吗? 谢谢。     

解决方法

        200使我认为一切正常,但是IE使用的是缓存的结果,我在使用IE之前就遇到了此问题。尝试添加:
$.ajaxSetup({
    // Disable caching of AJAX responses */
    cache: false
});
这将使其附加一个随机参数,并阻止IE变得愚蠢。     ,        
        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用户)并将响应作为“ 9”来解决。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。