c# - $.ajax 返回页面的 HTML 而不是结果

标签 c# jquery asp.net ajax webmethod

我写了一个简单的网络方法,我在客户端调用它来检查文本更改时数据库中是否存在值。它在本地运行良好,但当我将它移至我们的开发环境时,它会在响应中返回页面的整个 HTML。我唯一注意到的是本地 Response.Server 是 IIS7.5,但在我们的开发服务器上是 IIS6。

这是我的代码:

服务器代码

[ScriptMethod]
[System.Web.Services.WebMethod]
public static bool CheckInvoiceExists(string vendorNumber, string invoiceNumber)
    {
        try
        {
            return RequestEntry.CheckInvoiceExists(vendorNumber, invoiceNumber);
        }
        catch (Exception exp)
        {
            EventLogging.LogError("Error checking if invoice exists: " + exp.Message);
            return false;
        }
    }

客户端代码

function CheckInvoiceExists() {
//var vendNo = $('#VendNoInputDisplay').text();
var vendNo = $('#VendorNumber').val();
var invNo = $('#InvNoInput').val();
var error;
$.ajax({
    type: "POST",
    aSync: false,
    url: "PaymentRequest.aspx/CheckInvoiceExists",
    data: JSON.stringify({
        vendorNumber: vendNo,
        invoiceNumber: invNo
    }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        if (data.d) {
            $('#ErrorList').text(GetErrorText("invoiceNumberExists"));
            $('#InvNoInput').focus().select();
            $('#InvNoInput').addClass('error invExists');
        }
        else
        {
            $('#InvNoInput').removeClass('error invExists');
            ClearErrors();
        }
    },
    error: function (jqXHR, textStatus, errorThrown)
    {
        $('#ErrorList').text(errorThrown);

    }
});

这是我本地机器的响应头:

HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/7.5
Access-Control-Allow-Origin: *
Persistent-Auth: true
X-Powered-By: ASP.NET
Date: Mon, 26 Jan 2015 18:18:36 GMT
Content-Length: 11

来自开发:

HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Length: 25586
Date: Mon, 26 Jan 2015 18:30:40 GMT
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Cache-Control: private

当我调试它时,它会转到 $.ajax 调用的错误函数。

errorThrown : SyntaxError: Unexpected token <
jzXHR.responseText : [HTML of the page]
textStatus: "parserror"

当我打开 CheckInvoiceExist 包时,我看到:

Response is the current page. 
The request payload is something like this     {"vendorNumber":"0007000005","invoiceNumber":"Test1-12"}

@编辑 我尝试在我的网络方法上方添加以下行,但没有任何区别

[System.ServiceModel.Web.WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, UriTemplate = "json")]

@edit 我尝试使用 PageMethods 而不是使用 $.aJax 调用。然后我尝试了以下测试:

function Test(response)
{
  alert(response);
}

PageMethods.CheckInvoiceExists("0007000005","Test1-12",Test);

在警告消息中,我再次获得了该页面的 HTML...

最佳答案

好吧,在我的头撞在 table 上一整天后,我终于弄清楚出了什么问题。

我的 <system.web> 中缺少以下键在我的网络配置中

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

我猜 IIS7.5 不关心该行是否存在,但 IIS6 需要有该行才能使 Web 方法正常运行。

感谢大家的帮助!

关于c# - $.ajax 返回页面的 HTML 而不是结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28156529/

相关文章:

c# - 如何将 SQL 结果转换为 C# 中的对象列表?

jquery:鼠标悬停加载状态

javascript - 从 javascript 调用 web 方法时出现 ASP.NET 500 内部服务器错误

asp.net - 如何在 ASP.NET 上获取 IIS 虚拟目录的物理路径

c# - 如何告诉 NewtonSoft.Json.JsonConvert 将枚举序列化为字符串而不是 int

c# - 如何从 Azure 自动化中的 Runbook 调用 DLL 中的 C# 方法?

c# - 将配置数据保存在类库外部

javascript - 如何重新创建列表和内容的 sencha 风格手势滚动?

javascript - Angular js 我无法动态调用我的按钮

c# - 我必须检查 Asp.Net 中的数据库中是否存在数据