2015-01-26 19 views
5

Tôi đã viết một webmethod đơn giản mà tôi gọi ở phía máy khách để kiểm tra xem một giá trị tồn tại trong cơ sở dữ liệu về thay đổi văn bản. Nó hoạt động tốt tại địa phương, nhưng khi tôi di chuyển nó đến môi trường phát triển của chúng tôi nó trả về toàn bộ HTML của trang trong phản hồi. Điều duy nhất mà tôi đã nhận thấy là tại chỗ Response.Server là IIS7.5, nhưng trên máy chủ Dev của chúng tôi nó là IIS6.

Đây là mã của tôi:

Máy chủ Mã

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

Khách hàng Mã

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

    } 
}); 

}

Đây là tiêu đề phản hồi từ máy tính cục bộ của tôi:

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 

Từ 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 

Khi tôi gỡ lỗi nó, nó đi vào hàm sai số của cuộc gọi $ .ajax.

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

Khi tôi mở op gói CheckInvoiceExist tôi thấy:

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

@edit Tôi đã thử thêm dòng sau phương pháp nêu trên web của tôi, nhưng nó không tạo sự khác biệt

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

@edit Tôi đã cố gắng sử dụng PageMethods thay vì sử dụng các cuộc gọi $ .aJax. Sau đó, tôi đã cố gắng thử nghiệm sau đây:

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

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

Trong thông điệp cảnh báo tôi một lần nữa nhận được mã HTML cho trang ...

+0

bạn có thể đăng phương thức 'RequestEntry.CheckInvoiceExists' không? – mattytommo

+0

'chiều dài nội dung: 11' v.s. 'content-length: 25586' ... Tôi đoán trang v6 không được thực thi đúng cách vì bất kỳ lý do gì. –

+0

@mattytommo RequestEntery.CheckInvoiceExists chỉ gọi một thủ tục được lưu trữ từ cơ sở dữ liệu và sau đó trả về kết quả đó cho webmethod. –

Trả lời

0

Thay đổi phương pháp máy chủ của bạn để trở 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; 
     } 
    } 
+0

Khi gọi một 'WebMethod' với' JSON' là 'dataType' với' jQuery', nó đã trả về là 'JSON'. –

+0

Tôi đã cố gắng để thêm các ResponseFormat.Json đã –

2

Vâng sau khi đập đầu vào bàn của tôi trong một ngày, cuối cùng tôi đã tìm ra điều gì sai.

Tôi đã mất tích vào khoá sau trong <system.web> tôi trong cấu hình web của tôi

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

Tôi đoán rằng IIS7.5 không quan tâm nếu dòng đó là có hay không, nhưng IIS6 cần có dòng đó có để các phương thức web hoạt động.

Cảm ơn mọi người đã trợ giúp!

+0

Giống như bạn, tôi đã đập đầu của tôi chống lại bàn của tôi trong nhiều giờ và câu trả lời của bạn đã lưu đầu của tôi! – krlzlx

+0

Giống như bạn, tôi đã đập đầu vào bàn của tôi trong nhiều giờ và câu trả lời của bạn đã cứu được đầu tôi! Cảm ơn bạn rất nhiều. Happy Coding !! –

Các vấn đề liên quan