【问题标题】:$.ajax call returns application/json and works on test server, text/html on production server and fails$.ajax 调用返回 application/json 并在测试服务器上运行,在生产服务器上运行 text/html 并失败
【发布时间】:2013-03-13 10:27:19
【问题描述】:

前言:我知道有很多类似的问题,但没有一个对我有帮助。

我有点纠结。

我有一个 ASP.NET 应用程序,它使用 $.ajax 调用将一些数据返回到页面。我在 3 个不同的应用程序服务器上都有这个,它们都是 Windows Server 2003。

我没有在本地运行它,它在 3 个 Web 应用程序服务器上。 2 个有效,1 个无效。

此调用在开发服务器、开发测试服务器上完美运行,但在生产服务器上失败。我在 Chrome 中检查了控制台,发现在我的开发和开发测试环境中,ajax 调用返回application/json,但在生产环境中返回text/html。此外,在我的开发和开发测试服务器上,一切正常,我得到了它应该返回的 json,但在生产中,我得到了 200 OK,但它返回整个调用页面 html 并执行我的 ajax 的错误函数称呼。

这是我的 ajax 调用:

$.ajax({
      type: "POST",
      contentType: "application/json; charset=utf-8",
      url: "RequestDetail.aspx/postAsync",
      data: "{'reqSystem': '" + $('#ctl00_PlaceHolderMain_lblRequestSystem').text() + "', 'vendorNumber': '" + $('#ctl00_PlaceHolderMain_txtVendorNo').val() + "'}",
      dataType: "json",
      success: AjaxSucceeded,
      error: AjaxFailed
      });

下面是代码:

<System.Web.Services.WebMethod()> _
Public Shared Function postAsync(ByVal reqSystem As String, ByVal vendorNumber As String) As String
    Dim required = CheckForSpecialApproval(reqSystem, vendorNumber)
    Return required.ToString()
End Function

这是我在生产版 Chrome 的控制台中看到的内容:

这就是 Dev 上的样子:

我在生产服务器上检查了 IIS 中的 mime 类型,但 javascript 和 json 的 mime 类型不存在,因此我必须创建它们,但它仍然无法正常工作。我用谷歌搜索了这个问题,我无法弄清楚问题是什么。

如果您需要任何其他信息,我很乐意提供。

请帮忙。

提前致谢。

【问题讨论】:

  • 是的,我在所有 3 台服务器上都使用标准 IIS6。
  • 添加mime-type后是否重启了IIS?
  • 我做到了。不过,此应用程序在两台生产服务器之间进行负载平衡,因此我必须将其添加到两台服务器上,并在两台服务器上重新启动 IIS。是否可能需要重新启动服务器?

标签: asp.net ajax json jquery


【解决方案1】:

生产响应的大小惊人地相同,并且比开发响应大得多(173KB 对 366B)。您应该调查 text/html 响应的内容 - 该内容很可能实际上是 HTML 格式的错误消息。如果 Chrome 无法让您查看响应,请使用 Fiddler。

【讨论】:

  • 那是因为生产服务器正在返回调用页面的完整 HTML。不知道为什么,但确实如此。
  • 感谢您的宝贵时间。 +1
【解决方案2】:

原来生产 web.config 中缺少条目:

<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, &#xD;&#xA;                System.Web.Extensions, Version=3.5.0.0, Culture=neutral, &#xD;&#xA;                PublicKeyToken=31BF3856AD364E35">
  <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, &#xD;&#xA;                System.Web.Extensions, Version=3.5.0.0, Culture=neutral, &#xD;&#xA;                PublicKeyToken=31BF3856AD364E35">
    <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, &#xD;&#xA;                System.Web.Extensions, Version=3.5.0.0, Culture=neutral, &#xD;&#xA;                PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
    <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, &#xD;&#xA;                    System.Web.Extensions, Version=3.5.0.0, Culture=neutral, &#xD;&#xA;                    PublicKeyToken=31BF3856AD364E35">
      <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, &#xD;&#xA;                System.Web.Extensions, Version=3.5.0.0, Culture=neutral, &#xD;&#xA;                PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
      <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, &#xD;&#xA;                System.Web.Extensions, Version=3.5.0.0, Culture=neutral, &#xD;&#xA;                PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
      <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, &#xD;&#xA;                System.Web.Extensions, Version=3.5.0.0, Culture=neutral, &#xD;&#xA;                PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
      <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, &#xD;&#xA;                System.Web.Extensions, Version=3.5.0.0, Culture=neutral, &#xD;&#xA;                PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
    </sectionGroup>
  </sectionGroup>
</sectionGroup>

<add name="ScriptModule" type="System.Web.Handlers.ScriptModule,  System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

感谢大家的时间和回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2013-12-02
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多