【问题标题】:Ajax Webservice callAjax Web 服务调用
【发布时间】:2013-01-24 18:36:50
【问题描述】:

我的 ASPX 页面中有以下代码,用于从 Web 服务获取一些数据。我不能使用 WCF,所以我使用的是 ASMX 和 .Net 3.5。但是,我得到的是黄色的 ASP.net 错误页面,它谈论将 web.config 错误标记设置为 OFF。如果我从后面的代码调用我的方法并将其 response.write 到页面,我会得到一个我在 JSON Viewer 中查看过的 Json 字符串,它解析得很好。我的问题是 URL 格式。我在这里做错了什么。我发现的每个示例都使用 webservice.asmx/Method 格式。我还在我的 web.config 中添加了协议

<protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
</protocols>

页面脚本:

 $.ajax({
        type: 'GET',
        contentType: "application/json; charset=utf-8",
        url: 'http://myserver/mywebservice.asmx/MyMethod',
        dataType: 'jsondata',
        success: function (msg) {
            var table = "<table><tr><th>ID</th><th>Title</th></tr>"
            for (var i = 0; i <= msg.length - 1; i++) {
                var row = "<tr>";
                row += "<td>" + msg[i].ID + "</td>";
                row += "<td>" + msg[i].Title + "</td>";
                row += "</tr>";
                table += row;
            }
            table += "</table>";
            $("#myDiv").html(table);
        },
        complete: function () {
            alert("complete");
        }
    });

网络服务:

    <WebMethod(), ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=True)> _
Public Function MyMethod() As String
    'removed for shorter post
End Function

更新:所以使用 Chrome 中的开发工具,我发现我的部分问题是服务器返回了 403 Forbidden 错误。经过一些调整后,我想出了一个部分解决方案,可以用 json 格式返回我的数据。但是,该 json 格式的文本现在包装在 XML 中。 :-(

我还没有弄清楚如何从我的 json 中获取 XML。有什么想法吗?

【问题讨论】:

    标签: asp.net ajax web-services cross-domain


    【解决方案1】:

    你应该有

    contentType: "application/json; charset=utf-8",
    url: 'http://myserver/mywebservice.asmx/MyMethod',
    dataType: 'jsondata',
    

    类似于:

    contentType: "application/json",
    url: '/folderonmyserver/mywebservice.asmx/MyMethod',
    dataType: 'json',
    data: "{}", // needed for .Net not to blow up sometimes - or send real data
    

    并在您的成功中:参考 msg.d(或为 .Net 提供翻译以将其隔离)给定您的 .net 版本

    success: function (msg) {
        var mydata = msg.d;
        var table = "<table><tr><th>ID</th><th>Title</th></tr>"
        for (var i = 0; i <= mydata.length - 1; i++) {
    

    【讨论】:

    • 感谢您的回答,但我不确定我是否遵循您的说法。与我所拥有的和您所拥有的不同之处在于删除 charset=utf-8 并将 jsondata 更改为 json,对吗?如果是这样,这仍然不起作用。
    • 并删除 URL 的第一部分以仅引用页面中的相对(来自您的站点)位置。 - 当然隔离 .net 生成的 msg.d 对象。
    • 并且,您必须在 .Net 3.5 web.config 中进行一些额外的设置才能正常工作 - 谷歌搜索或在 SO 上搜索
    • 好吧,成功功能发生了变化,我无法更改 URL,因为这不是本地的。我的网络服务在完全不同的服务器上运行。
    • hmm 跨域...尝试设置dataType:"jsonp" = 小写在这里很重要
    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    相关资源
    最近更新 更多