我正在开发一个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");
}
});
}
然后在我的webservice中使用以下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";
}
}
我已经尝试将Web服务放在新文件夹中的DotNetNuke文件夹中,并且都放在本地项目中。我还将ScriptMethod()标记放在WebService中,允许脚本调用它..但仍然没有
答案 0 :(得分:1)
看起来您的问题是跨域调用。如果您的页面与Web服务托管在同一服务器上,您的代码应该没问题。如果您需要与其他域中的服务进行交互,则必须使用jsonp请求。请使用代码示例here查看此详细的分步指南。
<强>更新强>
如果同一个应用中的所有内容都尝试使用相关的网址。而不是url: '<%=ResolveUrl("~/DesktopModules/ModuleTest/WebService1.asmx/TestMethod")%>'
尝试url: '/DesktopModules/ModuleTest/WebService1.asmx/TestMethod'
。
答案 1 :(得分:0)
要从页面发布到DNN Web服务,您必须在模块的上下文中传递。我有一些示例代码可以在
处对抗DNN6http://slidepresentation.codeplex.com/SourceControl/changeset/view/69709#1181962
主要是
servicesFramework: $.ServicesFramework(<%=ModuleContext.ModuleId %>)
线
虽然最新的服务框架WebAPI发生了变化,但我没有对DNN7进行过测试。