【问题标题】:WCF Ajax Service Returns Blank to jQuery's RequestsWCF Ajax 服务向 jQuery 的请求返回空白
【发布时间】:2010-09-30 12:41:57
【问题描述】:

我在 *.svc 文件中使用 WebSriptServiceHostFactory 设置了一个 ASP.NET Ajax 服务 - 没有 web.config 配置。在合同中,我从两个非常简单的方法开始:

    [OperationContract()]
    [WebGet]
    string GetPersonalInformationLabel();

    [OperationContract()]
    [WebGet]
    string GetCorporateInformationLabel();

我的 jQuery 设置如下:

     $.ajaxSetup({
        type: "POST",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        dataFilter: function(data){
            var msg;

            if(    typeof(JSON) !== 'undefined' &&
                typeof(JSON.parse) === 'function')
                msg = JSON.parse(data);
            else
                msg = eval('(' + data + ')');

            if(msg.hasOwnProperty('d'))
                return msg.d;
            else 
                return msg;
        }
    });

  $("#chkCorporateGift").click(function(){
   if($(this).is(":checked")){
    $.ajax({
     type: "GET",
     url: "http://localhost/Services/OG.svc/GetCorporateInformationLabel",
     success: function(msg){
      $("#lblInformationType").text(msg);
     }
    });
   }
   else {
    $.ajax({
     type: "GET",
     url: "http://localhost/Services/OG.svc/GetPersonalInformationLabel",
     success: function(msg){
      $("#lblInformationType").text(msg);
     }
    });
   }
  });

如您所见,ajaxSetup 默认将类型分配为“POST”,但我不得不在下面的两个调用中用“GET”覆盖它,因为我得到“405 Method Not Allowed”可能是因为合同使用 [ WebGet] 两个方法的属性

现在 405 消息消失了,我继续在浏览器中直接调用这两个方法,它们会返回预期的结果。但是,当使用我在上面设置的 jQuery 代码调用这两个方法时,没有返回任何内容。关于我做错了什么有什么想法吗?

【问题讨论】:

  • 使用此代码的页面是否也由localhost提供?
  • 不,带有 jQ​​uery 的 html 文件位于 IIS 目录之外的本地文件中,而该服务在 IIS 上的 localhost 中运行。一旦我将 html 文件移动到 localhost 的虚拟目录,它就可以工作了。但是,我无法更改 的值。控制台中也没有返回错误......嗯

标签: jquery json wcf


【解决方案1】:

我要做的第一件事是检查FiddlerFirebug 是否有任何内容实际发送回浏览器。如果是这种情况,您可以使用 Visual Studio 2010 在 JavaScript 方法中设置断点并检查那里发生了什么。

当您从客户端调用 Web 服务方法时,您确实看到它们受到攻击?

如果这一切似乎工作正常,我会暂时取出dataFilter 函数,看看会发生什么。查看您的代码,我认为这是唯一可能出错的位置(尽管不确定出了什么问题)。你真的得到一个空的返回消息还是从未调用过 success 处理程序?

【讨论】:

  • 是的,Firebug 显示它们被击中,状态为 200。
  • Fiddler 在 HTTP 流量分析方面与 Firebug 有何不同?
  • 它们提供或多或少相同的流量分析功能。 Firebug 提供了更多的客户端功能。 Fiddler 可以安装到 Internet Explorer 中,由于您在 ASP.NET 网站上工作,我假设您使用的是 IE。
  • 我将 Firefox 设置为我的默认浏览器,所以一切都使用 FF 完成。是的,我喜欢 Firebug b/c 除了流量分析之外它提供的所有功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多