C# 从jqueryajax调用web方法
我试图从jquery调用一个web方法,但无法使其工作。请注意,我在其他答案中尝试了许多建议,但到目前为止没有任何效果 当我从页面加载调用该方法时,它工作正常。只有当我从.ajax()调用时,它才会失败。我得到一个“内部服务器错误”,当我在浏览器中调试时,我得到一个“加载资源失败” 就我的一生而言,我无法找出什么是错的。感谢您的帮助 我的ASP代码:C# 从jqueryajax调用web方法,c#,jquery,asp.net,ajax,C#,Jquery,Asp.net,Ajax,我试图从jquery调用一个web方法,但无法使其工作。请注意,我在其他答案中尝试了许多建议,但到目前为止没有任何效果 当我从页面加载调用该方法时,它工作正常。只有当我从.ajax()调用时,它才会失败。我得到一个“内部服务器错误”,当我在浏览器中调试时,我得到一个“加载资源失败” 就我的一生而言,我无法找出什么是错的。感谢您的帮助 我的ASP代码: $(document).ready(function () { var iipServ = "http://loc
$(document).ready(function () {
var iipServ = "http://localhost/fcgi-bin/iipsrv.fcgi";
var imgDir = String($("#<%= hfImageDir.ClientID %>").val());
var objData = String($("#<%= hfObjectData.ClientID %>").val());
var docid = $.url(window.location).param('doc');
$('#diva-viewer').diva({
iipServerURL: iipServ,
objectData: objData,
imageDir: imgDir,
tileFadeSpeed: 100,
fixedHeightGrid: true,
enableAutoTitle: false,
enableFullscreen: false,
contained: true,
enableAutoHeight: true,
enableAutoWidth: true,
enableDownload: true,
zoomLevel: 2
});
Events.subscribe("VisiblePageDidChange", function (pagenumber, fn) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "Viewer.aspx/GetTest",
datatype: "json",
data: {docID: JSON.stringify(docid),
pageNumber: JSON.stringify(pagenumber)},
success: function (response) {
alert("YAY!!");
alert(response.d);
$("#page-data").html(response.d);
},
error: function (xhr, status, error) {
alert("responseText=" + xhr.responseText +
"\n textStatus=" + status + "\n errorThrown=" + error);
}
});
});
});
您的代码目前存在几个问题 首先,您当前将数据传递给
$.ajax
,如下所示:
data: {docID: JSON.stringify(docid),
pageNumber: JSON.stringify(pagenumber)},
对我有效的是将其改为:
data: JSON.stringify({docID: docid,
pageNumber: pagenumber}),
如果没有这一更改,jQuery将数据作为docId=10&pageNumber=20
发送到服务器,这导致服务器端出现JSON反序列化问题
其次,您有数据类型:“json”
。它应该是数据类型:“json”,
-注意大写字母T
。也就是说,jQuery将根据服务器返回的内容来猜测这应该是什么,在本例中,服务器总是返回JSON,但仍然是
编辑:
在jQueryajax
中,contentType
属性设置请求上的Content-Type
HTTP头,指示请求主体的MIME类型
dataType
属性设置请求的Accept
头,指示可接受的响应MIME类型
在您的情况下,WebMethods
要求内容类型为application/json
,因此按原样设置contentType
是正确的
如果需要,还可以将
数据类型设置为json
。在这种情况下,这并不是必需的,因为jQuery将根据响应的内容类型标题猜测应该是什么。由于您的Web方法被配置为始终返回JSON,因此此标头应始终以application/JSON结尾;charset=utf-8
,这意味着jQuery应该总是做出正确的猜测。@KhanhTO不需要contentType
吗?而dataType
只会影响从服务器返回的内容-本例中的错误发生得更早-尽管我承认它仍然应该更改。问题:contentType?我将传回JSON数据(这不是我真正的函数)。我应该何时使用“application/x-www-form-urlencoded”;charset=UTF-8'?@KhanhTO查看此链接:似乎WebMethods要求将内容类型设置为application/json
@nick\u w:谢谢,我不确定。这就是为什么我贴了一个comment@Tums请参阅编辑给我的答案。我确实错误地传递了数据。通过查看许多示例,我尝试了该行的许多变体,但我一定错过了这一行(或者键入错误)。非常感谢。没问题。编码快乐。再次感谢您的解释!它运转得很好
data: JSON.stringify({docID: docid,
pageNumber: pagenumber}),