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 ...
bạn có thể đăng phương thức 'RequestEntry.CheckInvoiceExists' không? – mattytommo
'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ì. –
@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. –