简体   繁体   中英

$.ajax Returning HTML of the page instead of results

I wrote a simple webmethod that I call on the client side to check if a value exists in the database on text change. It works fine locally, but when I move it to our Development environment it returns the entire HTML of the page in the response. The only thing that I have noticed is that locally the Response.Server is IIS7.5, but on our Dev server it is IIS6.

Here is my code:

Server Code

[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;
        }
    }

Client Code

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);

    }
});

}

Here is the response header from my local machine:

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

From Dev:

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

When i debug it, it goes to the error function of the $.ajax call.

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

When I open op the CheckInvoiceExist package I see:

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

@edit I tried adding the following line above my web method, but it didn't make a difference

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

@edit I tried to use PageMethods instead of using the $.aJax calls. Then I tried the following test:

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

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

In the alert message I once again got the HTML for the page...

Well after banging my head against my desk for a full day I finally figured out what was wrong.

I was missing the following key in my <system.web> in my web config

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

I guess that IIS7.5 doesn't care if that line is there or not, but IIS6 needs to have that line there in order for web methods to function.

Thanks everyone for the help!

Change your server method to return 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;
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM