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

时间:2015-01-26 18:39:48

标签: c# jquery asp.net ajax webmethod

我写了一个简单的web方法,我在客户端调用它来检查数据库中是否存在文本更改的值。它在本地工作正常,但是当我将它移动到我们的开发环境时,它会在响应中返回页面的整个HTML。我注意到的唯一事情就是本地Response.Server是IIS7.5,但在我们的Dev服务器上它是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"}

@edit 我尝试在我的网络方法上面添加以下行,但它没有什么区别

[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 ...

2 个答案:

答案 0 :(得分:2)

在我的头撞到桌子上一整天之后,我终于找到了问题所在。

我的网络配置中的<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方法正常运行。

感谢大家的帮助!

答案 1 :(得分:0)

更改您的服务器方法以返回JSON:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
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;
        }
    }