Dotnetnuke从一个模块调用ajax

我现在正在尝试使用ajax调用构建一个dnn模块。 但是有一个jquery错误说明

SyntaxError:意外的令牌<

我试图使用ajax“url:”并尝试在根文件夹中创建一个新的ascx,但仍显示错误404。

我的ajax电话如下

$.ajax({ url: "NewsManagement.ascx/Add", contentType: "application/json; charset=utf-8", dataType: "json", method: "POST", beforeSend: function () { }, cache: false, data: { title : $('#txt_Title').val(), news_content : $('#txt_Content').val(), image : $('#file_Image').val(), chapter_id : $('#sel_Chapter').val(), is_draft : $('#chk_Draft').val(), posted_date : $('#dp_PostDate').val(), created_by : "", lastupdate_by : "" }, success: function (data) { console.log(data); if (data == "success") { console.log(data); } else { initMdlError("SERVER : " + data); } }, error: function (data, textStatus, error) { // ERROR IS BEING CALLED FROM HERE console.log("JQUERY JAVASCRIPT : " + error); initMdlError(error); }, complete: function () { console.log('complete'); } }); 
  

有什么方法可以解决这个问题吗?

您遇到的问题是DNN未正确处理您正在呼叫的请求的URL。 如果您想在DNN中呼叫服务URL,您将需要设置路由来处理呼叫。

 namespace Christoc.Com.Modules.SlidePresentation.services { public class SlidePresentationRouteMapper : IServiceRouteMapper { public void RegisterRoutes(IMapRoute mapRouteManager) { mapRouteManager.MapRoute("SlidePresentation", "{controller}.ashx/{action}", new[] {"Christoc.Com.Modules.SlidePresentation.services"}); } } } 

在Controller中,您可以定义可用的方法

 [DnnAuthorize(AllowAnonymous = true)] public ActionResult ListOfSlides() { try { var slides = Slide.GetSlides(ActiveModule.TabID, ActiveModule.ModuleID); return Json(slides, JsonRequestBehavior.AllowGet); } catch (Exception exc) { DnnLog.Error(exc); return Json(null, JsonRequestBehavior.AllowGet); } } 

https://slidepresentation.codeplex.com/SourceControl/latest#DesktopModules/SlidePresentation/services/SlidePresentationController.cs

示例Javascript

  //get slides on initialization this.init = function(element) { //var data = {}; //removed because we don't need this //data.moduleId = moduleId; //removed because we don't need this when calling setModuleHeaders //data.tabId = tabId; //removed because we don't need this //serviceFramework.getAntiForgeryProperty(); //removed because we don't need this $.ajax({ type: "POST", cache: false, url: baseServicePath + 'ListOfSlides', //data: data, //dataType:"json", beforeSend: serviceFramework.setModuleHeaders }).done(function(data) { viewModel.slides = ko.utils.arrayMap(data, function(s) { return new slide(s); }); ko.applyBindings(viewModel); $(element).jmpress(); }).fail(function () { Console.Log('Sorry failed to load Slides'); }); }; 

这是一个执行此操作的示例模块

https://slidepresentation.codeplex.com/

我多年前在这个模块上做过的用户组video。 https://www.youtube.com/watch?v=hBqn5TsLUxA