实例详解angularjs和ajax的结合使用
这篇文章将带你深入了解AngularJS与AJAX的结合使用,对于对AngularJS和AJAX感兴趣的你,相信会有不少收获。
让我们从easyui与ajax的使用开始谈起。easyui是一种基于jQuery的UI插件集合,它提供了丰富的交互界面,而ajax则是一种在后台与服务器进行数据交互的技术,无需刷新页面即可实现数据的动态更新。在web开发中,我们经常需要将这两者结合起来使用,以提升用户体验。
接下来,我们来建立一个名为HelloAjaxNet.aspx的webform页面。在这个页面中,我们将使用到一个广为流传的AjaxPro.2.dll工具。这个工具能够帮助我们更方便地在客户端与服务器之间进行数据交互。
在新的asp版本中,我们可以使用服务端方法,通过webmethod属性声明,让客户端的pagemethods来访问。这些对象也可以进行json数据化处理,以实现数据的无缝传递。在微软自带的aspx的codebehind代码方法中,我们需要添加static关键字。对于webconfig的配置,在新版的vs2013开发环境下,无需特别配置。如果是老版本,则需要新建ajax网站项目,并在webconfig中进行相应设置。
在服务端页面载入事件中,我们需要添加ScriptManager.GetCurrent(Page).EnablePageMethods = true;这一行代码,以便在客户端使用pagemethods的方式访问服务端方法。
我仍然更倾向于使用AjaxPro.2.dll这种方式。它的原理是在页面载入时注册服务端对象,然后在生成的html页面上引入几个js文件。这些文件包含了服务端自动生成的可供客户端js调用的脚本。这样,我们就可以在客户端像调用服务端方法一样,实现数据的无缝传递。
这种方式的优点在于,它简化了客户端与服务器之间的数据交互,使得开发者能够更专注于业务逻辑的实现,而无需过多关注底层的数据传输细节。通过ajax和json数据化技术的结合,我们可以实现更高效、更灵活的数据传输和处理方式,从而提升web应用的性能和用户体验。
AngularJS与AJAX的结合使用,可以让我们在开发web应用时更加得心应手。AngularJS作为一种前端框架,提供了丰富的功能和工具,而AJAX则为我们提供了在后台与服务器进行数据交互的能力。通过结合这两者,我们可以开发出更强大、更高效的web应用,为用户带来更好的体验。希望这篇文章能对你有所帮助,让你对AngularJS和AJAX的结合使用有更深入的了解。在过去的时代,处理json数据的序列化似乎只能依赖外部json库或是微软自带的工具进行手动,这无疑增加了开发的复杂性。
服务端
让我们先看一下服务端如何处理json数据。在一个名为`ServerProcerMethod`的方法中,原本需要手动json字符串并将其转化为`StuInfo`对象或对象列表。这个过程现在可以通过使用`System.Web.Script.Serialization.JavaScriptSerializer`类轻松完成。这个类能够json字符串并自动将其序列化为对应的对象或对象列表。如果序列化的对象列表不为空且含有元素,方法会进一步将其中一个对象序列化回json字符串并返回。否则,返回null。
客户端
在客户端,javascript自带的函数`JSON.parse`和`JSON.stringify`足以完成json对象和字符串之间的转换。这是现代前端开发中常见的操作,极大地简化了数据的处理和传输。
再来说说关于AjaxPro.2.dll和ajax.dll的困惑。这两个文件看似不同,实际上都是用于处理Ajax请求的组件,可能是由同一开发者或团队开发的。为了确保Ajax请求的成功处理,我们需要引入相应的dll文件并配置webconfig中的httphandler,使得ashx请求能够转向我们的ajaxpro代码。这样,客户端的javascript就能直接调用服务端的方法了。
配置的部分涉及到在system.webServer节点下添加handlers,用于处理.ashx路径的请求,转发到我们的ajaxpro处理代码。这样,服务端和客户端就能通过json数据进行有效的通信了。
关于easyui,它可以理解为一系列增强型的控件,类似于jquery。它允许开发者用其提供的工具包装js对象和html原生控件,从而调用预定义的方法,简化数据处理。对于企业管理类软件来说,easyui提供的默认控件外观和便捷的数据处理功能是非常实用的。而其他类型的开发,可能会觉得它功能相对有限。技术的选择总是要根据具体的需求和场景来决定。融入EasyUI:打造流畅的前端体验
在web开发中,为了提高用户体验和界面美观度,我们常常需要引入各种UI框架。今天,让我们一起来如何轻松集成EasyUI,并将其融入到我们的项目中。
你需要下载EasyUI的相关文件,这包括jQuery、EasyUI的JS文件和样式文件。将这些文件放置在你的项目相应文件夹中。
接下来,引入必要的JS和样式文件:
```html
```
一旦这些文件被正确引入,你就可以开始使用EasyUI的各类控件了。就像其在官方首页所介绍的那样,你可以通过CSS样式或JS代码,轻松将原生的HTML控件转化为EasyUI控件。
例如,你可以创建一个带有标题和图标的对话框:
```html
```
对于数据展示,EasyUI的datagrid控件非常实用。你只需在客户端HTML中放置一个table标签,如`
接下来,你可能会问如何传递参数,如数据来源、要显示的列、分页方式以及每页显示的数据条数等。这些都可以通过datagrid的初始化设置来完成。你可以在document.ready()时完成这些设置,也可以在需要的时候动态调整。
国内有许多JS框架都提供了类似的UI组件,但EasyUI以其简洁和实用性受到了广大开发者的喜爱。尤其是其ajax服务端分页功能,更是为数据展示提供了极大的便利。
融入EasyUI,不仅可以提高你的开发效率,还能为用户带来更加流畅的前端体验。不妨尝试一下,让你的项目焕发新的活力!深入理解EasyUI的DataGrid组件:如何接收JSON参数并实现数据绑定
EasyUI作为一种基于jQuery的UI插件集合,为开发者提供了丰富的UI组件,其中DataGrid便是其重要一员。在很多应用场景中,EasyUI的DataGrid组件都能够接收JSON对象形式的一坨参数,以展示和处理数据。
在`bindDataToTb`函数中,我们看到了如何使用`loader`来加载数据。这里的关键是调用服务端的方法`WebApplication1.NewFolder2.HelloAjaxNet.BindData`来检索数据,同时传递三个参数:查询关键词(`param.keyword`)、当前页码(`param.page`)以及每页显示的行数(`param.rows`)。这些参数都是EasyUI为了方便开发者而特意暴露的。
掌握 EasyUI 控件的属性、方法与调用,实现数据自动刷新
在服务器端,我们借助 Entity Framework 的 Code First 方式处理数据。它与 MSSQL 数据库紧密结合,提供了一站式的开发体验。
服务端代码详解
对于服务端代码,我们以一个带分页功能的查询为例。通过 AjaxPro 的 AjaxMethod,我们实现了一个静态方法 BindData,它接受关键字、页码和行数作为参数,并返回查询结果。
```csharp
// 查询(带分页)
[AjaxPro.AjaxMethod]
public static WebApplication.DataEntity BindData(string keyword, int page, int rows)
{
// 省略初始化及数据库连接代码
var data = from studentInfo in db.Students
where studentInfo.name.Contains(keyword)
select new { stuNo = studentInfo.stuNo, name = studentInfo.name, age = studentInfo.age, gradName = studentInfo.grad.gradName };
// 计算总页数及当前页索引的调整逻辑
// 省略分页逻辑细节及数据列表创建过程
WebApplication.DataEntity result = new WebApplication.DataEntity();
result.total = data.Count(); // 总记录数
result.rows = dt; // 当前页数据列表
return result; // 返回结果集给前端处理展示
}
```
服务端分页功能实现完全无刷新体验,只需通过简单的操作即可获取新的数据。录入功能同样便捷,借助 EasyUI 自带的表单验证功能,可以大大提高开发效率和用户体验。至于搜索和删除功能,搜索只需重新加载数据即可;删除操作则通过自定义列传递 ID 到 JS 函数,再调用服务端删除接口完成。所有这些功能共同为用户带来流畅的使用体验。
在web开发中,我们经常需要创建弹出层来收集用户信息。使用easyui框架,这一切都变得非常简单。只需创建一个带有特定class的div,并添加相应的data-options,就可以轻松渲染一个弹出层。
比如,我们想要创建一个新学生注册的弹出层,只需写下如下代码:
`
这个div元素,只要赋予它`easyui-dialog`的类,并通过data-options设定一些参数,就能自动变成一个功能完善的弹出层。其中的参数如`closed:true`表示弹出层默认是关闭的,`title:'新学生注册'`设定了弹出层的标题为“新学生注册”,`modal:true`则表示这是一个模态弹出层。
例如,学生姓名这一栏,可以使用带有`easyui-textbox`样式的input元素,并添加data-options来进行验证。班级这一栏,可以使用带有`easyui-bobox`样式的input元素,同样通过data-options来进行选择和验证。
我们还可以通过一个链接来打开弹出层,例如:`加新的`。这样,用户只需点击这个链接,就可以打开弹出层。
保存按钮触发的JavaScript功能
当你点击保存按钮时,一段名为`saveClick`的JavaScript函数将被激活。这个函数主要任务是处理信息的保存工作。
它验证一个叫做`addBox`的表单,这个表单是你需要提交信息的div框的id。如果表单验证失败,也就是说有些信息没有正确填写,那么就会弹出一个提示框,告诉你哪些项没有填写完整,然后停止进一步的操作。
接下来,函数创建一个名为`stu`的对象,用于存储用户的信息。这个对象包括名字、年龄、毕业id和毕业名称。这些信息是从相应的输入字段中获取的。特别注意的是,如果用户输入的毕业id不是数字,那么它将被设置为null。
然后,这个函数通过调用`WebApplication.NewFolder.HelloAjaxNet.addStu(stu)`来添加学生信息。如果返回的结果表明操作成功("ok"),那么它会关闭添加框,并重新加载数据网格。它会获取毕业信息并重新加载毕业选择框。
如果添加学生信息的操作失败,那么它会弹出一个提示框,显示错误信息。
关于EasyUI的验证
```javascript
$(function() {
// 页面初始化
bindDataToTable();
// 载入班级下拉框数据
var gradData = WebApplication.NewFolder.HelloAjaxNet.getGrad().value;
$('grad').bobox({ data: gradData }).bobox('reload');
var fd = new FormData();
// 其他前端逻辑代码...
});
```
接下来,让我们深入了解一下服务端保存的代码逻辑。这是一个典型的Web API调用,使用AjaxPro框架进行Ajax通信。假设我们正在处理学生信息的添加操作:
```csharp
// 添加学生信息的方法,使用AjaxPro进行Ajax调用
[AjaxPro.AjaxMethod]
public string addStu(StudentsInfo stu)
{
MyDb db = new MyDb(); // 数据库连接或操作对象
if (stu.GradId == null) // 如果未提供毕业ID(假设为ID标识)则进一步处理毕业名称相关逻辑
{
if (!string.IsNullOrEmpty(stu.gradName)) // 判断毕业名称是否已提供且不为空字符串则处理相关逻辑
{
Grad grd = new Grad(); // 创建新的毕业信息对象实例准备添加到数据库
grd.gradName = stu.gradName; // 设置毕业名称属性或数据项等赋值操作
Grad grdOld = db.grads.FirstOrDefault(r => r.gradName == stu.gradName); // 检查数据库中是否已经存在该毕业名称的记录
在这块神秘的代码领域里,我看到了数据操作和业务逻辑如影随形,相互依存。业务逻辑仿佛一位优雅的指挥家,精准地掌握着每一个操作的节奏和步骤。它驾驭着数据,将数据转化为有意义的信息,推动应用程序的顺畅运行。在这个过程中,数据就像乐符一样跳跃着,流动着,共同编织出美妙的旋律。
controller函数就像一座桥梁,连接着应用程序与数据的交流。它承载着业务逻辑的重任,将复杂的操作过程化为一道道指令,让应用程序能够准确无误地执行。在这个函数中,我看到了数据的舞动和业务逻辑的指挥。它们协同工作,将静态的数据转化为动态的、有生命力的信息流。这种奇妙的转化过程让我不禁为之惊叹。
每一行代码都是一场奇妙的旅程,它们承载着开发者的思想和智慧。在这个controller函数中,我看到了开发者对数据操作的精湛技艺和对业务逻辑的深刻理解。这种理解不仅仅是对代码的理解,更是对业务需求的敏锐洞察和对技术挑战的勇敢应对。在这个小小的函数世界里,我看到了无限的可能性和无限的创新空间。
代码部分:
```javascript
function myCtr($scope) {
var mod = [{ name: 'xiang', age: '' }, { name: 'xiang', age: '' }, { name: 'xiang', age: ''}]; // 初始化数据模型
$scope.data = mod; // 将数据模型绑定到作用域
$scope.curobj = {}; // 当前对象,用于存储选中项
$scope.pageEntity = { total: 0, rows: 10, page: 1, pgmsg: '' }; // 分页实体,包含总记录数、每页显示条数等
// 初始化页面,获取第一页数据
$scopeitPage = function () {
var keyword = $("txtkeyword").val(); // 获取搜索关键词
var pageData = WebApplication.NewFolder.HelloAjaxNetAngular.BindData(keyword, $scope.pageEntity.page, $scope.pageEntity.rows);
$scope.data = pageData.value.rows; // 更新数据
$scope.pageEntity = updatePageInfo(pageData.value); // 更新分页信息
$scope.curobj = {}; // 重置当前选中对象
};
// 更新分页信息
function updatePageInfo(data) {
var totalpage = Math.ceil(data.total / $scope.pageEntity.rows); // 计算总页数
return {
total: data.total,
rows: $scope.pageEntity.rows,
page: $scope.pageEntity.page,
pgmsg: "共 " + data.total + " 条记录,每页 " + $scope.pageEntity.rows + " 条,共 " + totalpage + " 页,当前第 " + ($scope.pageEntity.page) + " 页"
};
}
// 更新当前选中项
$scope.modifyCur = function () {
var result = WebApplication.NewFolder.HelloAjaxNetAngular.updateStu($scope.curobj); // 更新操作
alert(result); // 提示更新结果
$scopeitPage(); // 重新初始化页面,刷新数据
};
// 下翻页
$scope.nextPage = function () {
if ($scope.pageEntity.page < totalpage) { // 如果当前页数小于总页数
$scope.pageEntity.page++; //
$scopeitPage(); // 重新初始化页面,刷新数据
}
};
// 上翻页
$scope.previousPage = function () {
if ($scope.pageEntity.page > 1) { // 如果当前页数大于第一页
$scope.pageEntity.page--; // 上一页
$scopeitPage(); // 重新初始化页面,刷新数据
}
};
// 搜索功能待实现(根据实际需求编写)
$scope.search = function () { / 实现搜索功能 / };
// 选中一行,高亮显示
$scope.del = function (event, item) { / 实现选中行的高亮显示逻辑 / };
// 调用初始化函数获取第一页数据
$scopeitPage();
}
```
所有示例项目的源码已可供下载,下载后可直接运行。由于引入了部分外部库,文件大小逼近十兆。
关于互联网的发展,我深感前端将会一统江湖,前端将成为主流。一个网页就是一个系统,一个客户端。后端只需负责数据与安全。看到博客园里的一些,我对前后端合一的mvc模式有所感悟。前端更新属性时,有一种机制能自动同步至后端并持久化到数据库;后端更新model的某个属性时,前端html页面的值也会自动变化。虽然这种技术可能还未完全稳定,但牛人们已经在不断与实现。
各种UI框架如easyui、ligerui、fineui、miniui以及Devexpress等层出不穷,js框架如seajs、requirejs、JavaScriptMVC、backbone、avalonjs、knockout等也是五花八门,让人应接不暇。虽然软件行业基于框架和平台的技术繁多,不精通某样技术也没关系,能使用即可。但作为技术人员,至少得精通一门技术。否则,可能只是在搬砖。遗憾的是,我仍处在搬砖的路上,写业务代码的也在寻求研究事情的本质。
优秀的程序员在开发数据库系统时,都会追求快速开发,积累自己的工具库和经验,制造一些工具让web开发更轻松。在工作上,不应有偏见。只要每天能完成业务代码,软件开发只是一门职业,目的在解决问题,而非纠结细节。
虽然我对js并不太感冒,它也存在许多缺陷,但在web开发中又不得不使用。这并不是对前端开发者有偏见,反而要感谢那些将前端技术吃得透的人,如司徒正美等高手,他们制造的这些工具让我们更容易完成网站程序。
平面设计师
- 实例详解angularjs和ajax的结合使用
- 服务器XMLHTTP(Server XMLHTTP in ASP)基础知识
- React如何避免重渲染
- 回到过去 歌词
- Zend Framework开发入门经典教程
- JS实现环形进度条(从0到100%)效果
- Vue 动态设置路由参数的案例分析
- jQuery下拉菜单的实现代码
- Mysql优化技巧之Limit查询的优化分析
- 几种经典排序算法的JS实现方法
- PHP基于PDO扩展操作mysql数据库示例
- 正则表达式的语法
- 如何获知页面上的图象的实际尺寸?
- Ajax和form+iframe 实现文件上传的方法(两种方式
- 难受就一颗一颗挤出来
- repeater 分列显示以及布局的实例代码