Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从jqueryajax调用web方法_C#_Jquery_Asp.net_Ajax - Fatal编程技术网

C# 从jqueryajax调用web方法

C# 从jqueryajax调用web方法,c#,jquery,asp.net,ajax,C#,Jquery,Asp.net,Ajax,我试图从jquery调用一个web方法,但无法使其工作。请注意,我在其他答案中尝试了许多建议,但到目前为止没有任何效果 当我从页面加载调用该方法时,它工作正常。只有当我从.ajax()调用时,它才会失败。我得到一个“内部服务器错误”,当我在浏览器中调试时,我得到一个“加载资源失败” 就我的一生而言,我无法找出什么是错的。感谢您的帮助 我的ASP代码: $(document).ready(function () { var iipServ = "http://loc

我试图从jquery调用一个web方法,但无法使其工作。请注意,我在其他答案中尝试了许多建议,但到目前为止没有任何效果

当我从页面加载调用该方法时,它工作正常。只有当我从.ajax()调用时,它才会失败。我得到一个“内部服务器错误”,当我在浏览器中调试时,我得到一个“加载资源失败”

就我的一生而言,我无法找出什么是错的。感谢您的帮助

我的ASP代码:

        $(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,但仍然是

编辑:

在jQuery
ajax
中,
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}),