1

我正在开发一个 dotnetnuke 模块,并且通过 javascript 连接到 web 服务以检索数据时遇到很多问题。

我有以下 javascript:

function Test() {
        $.ajax({
            type: "POST",
            url: 'http://localhost/DNN11/service1.asmx/TestMethod',
            data: "{'data':'" + "abc" + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
                alert("success");
            },
            error: function(e) {
                alert("error");
            }
        });


    }

然后我的网络服务中的以下WebMethod

[WebMethod]
    public string TestMethod(String data)
    {
        return "Hello World";
    }

但是,当帖子没有被成功调用时,我无法通过我的网络服务。它不断给我一个 500 内部服务器错误页面。

请问有什么问题吗?我还有其他方法可以解决这个问题吗?

谢谢

[编辑]

这是整个代码

<script type="text/javascript">
    function Test() {

        $.ajax({
            type: "POST",
            url: '<%=ResolveUrl("~/DesktopModules/ModuleTest/WebService1.asmx/TestMethod")%>',
            data: '{ data: "test" }',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
                alert("Success: " + msg);
            },
            error: function(msg) {
                alert("Failed: " + msg.status + ": " + msg.statusText);
            }
        });   

    }
</script>

<div>
    <input type="button" value="Load" onclick="Test(); return false;" />
</div>

[System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        [ScriptMethod()]
        public string TestMethod(string data)
        {
            return "Hello World";
        }
    }

我尝试将 Webservice 放在 DotNetNuke 文件夹中的新文件夹和本地项目中。我还将 ScriptMethod() 标记放在允许脚本调用它的 WebService 中。但仍然没有

4

2 回答 2

1

看起来你的问题是跨域调用。如果您的页面与 Web 服务托管在同一台服务器上,那么您的代码应该没问题。如果您需要与来自其他域的服务进行交互,则必须使用 jsonp 请求。在此处查看带有代码示例的良好分步指南。

更新

如果同一应用程序上的所有内容都尝试使用相关 URL。而不是url: '<%=ResolveUrl("~/DesktopModules/ModuleTest/WebService1.asmx/TestMethod")%>'尝试url: '/DesktopModules/ModuleTest/WebService1.asmx/TestMethod'.

于 2013-01-26T19:07:34.393 回答
0

为了从页面发布到 DNN 网络服务,您必须传入模块的上下文。我有一些适用于 DNN6 的示例代码

http://slidepresentation.codeplex.com/SourceControl/changeset/view/69709#1181962

主要是

servicesFramework: $.ServicesFramework(<%=ModuleContext.ModuleId %>)

线

尽管使用最新的服务框架 WebAPI 更改,但我尚未针对 DNN7 进行测试。

于 2013-01-29T04:57:36.077 回答