Ajax技术深度解析 - AJAX_in_Action

需积分: 10 1 下载量 36 浏览量 更新于2024-07-29 收藏 9.66MB PDF 举报
"AJAX_In_Action" 是一本关于AJAX技术的专业书籍,由Dave Crane、Eric Pascarello和Darren James合著,由Manning出版社出版。本书详细探讨了AJAX在后台框架中的应用。 AJAX(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下更新部分网页内容的技术。它通过在后台与服务器交换数据并局部更新页面来增强用户的交互体验,使得网页更加动态和响应迅速。在"AJAX In Action"这本书中,作者深入浅出地讲解了AJAX的核心概念、实现方法以及实际开发中的应用。 书中的内容可能涵盖了以下几个主要知识点: 1. **基础概念**:介绍AJAX的工作原理,包括XMLHttpRequest对象、JavaScript事件处理、DOM操作等基础知识,帮助读者理解AJAX如何与服务器进行异步通信。 2. **AJAX工具和库**:讨论了如jQuery、Prototype、Dojo等流行的JavaScript库,它们简化了AJAX的开发,并提供了丰富的功能,如动画效果、AJAX请求的封装等。 3. **跨域问题**:由于同源策略的限制,AJAX通常只能与同一域名下的服务器进行通信。书中可能讲述了如何使用JSONP或CORS等方法解决跨域问题。 4. **数据格式**:虽然名称中含有XML,但现代AJAX更多地使用JSON格式进行数据交换,因为JSON更轻量级且易于解析。书中会介绍如何处理XML和JSON数据。 5. **AJAX设计模式**:探讨了如何优雅地组织AJAX代码,如使用回调函数、Promise或async/await等,以提高代码可读性和可维护性。 6. **性能优化**:讲解如何减少HTTP请求、缓存策略、延迟加载等技术,以提升AJAX应用的性能。 7. **用户体验**:讨论如何通过AJAX改进用户体验,如提供进度指示、错误处理机制,以及如何处理浏览器兼容性问题。 8. **案例研究**:通过实际的Web应用示例,展示AJAX技术在创建动态、交互式用户界面中的应用,例如实时聊天、动态表格和地图应用等。 9. **后台框架集成**:AJAX不仅仅是前端技术,它需要与后台框架(如Java的Spring MVC、Python的Django、Ruby on Rails等)紧密配合。书中可能会讲解如何在这些框架中集成AJAX。 10. **安全性**:探讨使用AJAX时可能出现的安全问题,如XSS(跨站脚本攻击)和CSRF(跨站请求伪造),以及如何防范这些威胁。 "AJAX In Action"是一本全面的AJAX指南,适合对前端开发感兴趣的开发者阅读,无论是初学者还是有经验的开发者,都能从中获得宝贵的知识和实践经验。通过学习本书,读者将能够熟练地运用AJAX技术,提升Web应用的交互性和用户体验。
2023-07-13 上传

优化这个sql select FLOW_COMMON.c_business_id as business_id, (select max(f.end_time) from flow_hi_track f where f.business_id = FLOW_COMMON.c_business_id and f.action_type != 'CLAIM' ) as deal_time from template_flow_common FLOW_COMMON right join template_hollycrm1680160914000 hollycrm1680160914000 on FLOW_COMMON.c_business_id = hollycrm1680160914000.c_business_id where FLOW_COMMON.tenant_id = 'T000' and FLOW_COMMON.valid = 1 and lower(FLOW_COMMON.c_state) != 'draft' and ( ( FLOW_COMMON.c_flow_id in ('FLOW20230330152148238756') and (FLOW_COMMON.c_processing_group in ('1650685461842100265') ) or FLOW_COMMON.c_cur_assignee = '1639203916409208891' ) or FLOW_COMMON.c_creator = '1639203916409208891' or FLOW_COMMON.c_flow_id in ('FLOW20230330152148238756') or FLOW_COMMON.c_business_id in ('1650765461521956870', '1650765461521956870', '1650817085812506712', '1650831863482155082', '1654094763571281921', '1654001405104488514', '1654294361434751036', '1654445890410119245', '1654441313937915946', '1654433554383241232', '1653329109050196051', '1655380751421538376', '1655380751421538376', '1654732194700066894', '1654765190966673497', '1655862681678118938', '1654732194700066894', '1654732194700066894', '1654732194700066894', '1654441313937915946', '1656855682290286598', '1654732194700066894', '1654732194700066894', '1654732194700066894', '1656106327421747261') or (FLOW_COMMON.c_processing_group in ('1650685461842100265')) ) and FLOW_COMMON.c_workorder_type = 'C0018' and FLOW_COMMON.c_business_type = 'C00180008,C001800080001,C0018000800010001' LIMIT 572540,10;

2023-07-25 上传

编译报错 CREATE OR REPLACE PROCEDURE get_dev_cs IS sql_tem VARCHAR2(4000); v_dt NUMBER; BEGIN ----om_subscriber_yyyymm sql_tem := 'truncate table ycyd.Subscriber_cs'; EXECUTE IMMEDIATE sql_tem; FOR v_dt IN (SELECT to_number(substr(table_name, '15')) db FROM sys.all_tables a WHERE a.owner = upper('jour1') AND a.table_name LIKE upper('om_subscriber_202___') AND substr(table_name, '15') > 202205) LOOP -- 循环往b里添加数据 sql_tem := ' INSERT INTO ycyd.Subscriber_cs SELECT a.order_id, a.done_date, a.cust_id, a.subscriber_ins_id, a.access_num FROM jour1.om_subscriber_' || v_dt.db || ' a WHERE a.action = 0 AND a.is_usim = 1'; -- 执行sql EXECUTE IMMEDIATE sql_tem; END LOOP; ----om_order_yyyymm sql_tem := 'truncate table ycyd.order_cs'; EXECUTE IMMEDIATE sql_tem; COMMIT; FOR v_dt IN (SELECT to_number(substr(table_name, '15')) db FROM sys.all_tables a WHERE a.owner = upper('jour1') AND a.table_name LIKE upper('om_subscriber_202___') AND substr(table_name, '15') > 202205) LOOP -- 循环往b里添加数据 sql_tem := ' INSERT INTO ycyd.order_cs SELECT order_id, dev_id FROM JOUR1.om_order_' || v_dt.db || ' b'; -- 执行sql EXECUTE IMMEDIATE sql_tem; END LOOP; COMMIT; ---dev sql_tem := 'truncate table ycyd.yd_order_dev_3056'; EXECUTE IMMEDIATE sql_tem; -- 添加数据 sql_tem := ' INSERT INTO ycyd.yd_order_dev_3056 SELECT a.order_id, a.done_date, a.cust_id, a.subscriber_ins_id, a.access_num, c.dev_id, c.dev_name, d.code, c.dev_busi_code, c.corp_org, c.company_name, c.department_code, c.department_name, c.remarks FROM ycyd.Subscriber_cs a LEFT JOIN ycyd.order_cs b ON a.order_id = b.order_id LEFT JOIN params1.sec_developer c ON b.dev_id = c.dev_id LEFT JOIN (SELECT DISTINCT oo.code,s.bill_id FROM params1.sec_operator oo, params1.sec_staff s WHERE s.staff_id = oo.staff_id AND oo.state = 1 AND oo.staff_id NOT in ('123402933','123395474','123404209')) d ON c.dev_phone = d.bill_id WHERE c.corp_org = 3056'; -- 执行sql EXECUTE IMMEDIATE sql_tem; COMMIT; END get_dev_cs;

2023-07-14 上传

PoiSearchInfo pi = null; String result = intent.getStringExtra("object"); Log.d(TAG, "json: " + result); JSONObject res = new JSONObject(result); JSONObject object = res.getJSONObject("object"); query = intent.getStringExtra(KEY_RULE_RAW); String api = object.getString("api"); String action1 = object.getString("action"); if (API_SEARCH_NEAR_BY.equals(api)) { pi = new PoiSearchInfo(Constant.MAP_SEARCH_NEARBY, 5000, false, null, object.getString("keyword")); } else if (API_SEARCH_IN_CITY.equals(api)) { pi = new PoiSearchInfo(Constant.MAP_SEARCH_CITY, 5000, false, null, object.getString("keyword")); } else if (API_SEARCH_IN_CITY.equals(action1)) { pi = new PoiSearchInfo(Constant.MAP_SEARCH_CITY, 5000, false, null, object.getString("keyword")); } else if (API_MAP_SETTING.equals(api) || API_MAP_QUERY.equals(api)) { String action = object.getString("action"); Activity tempActivity = App.getMultiRoundActivity(); if (tempActivity != null && tempActivity instanceof MapBaseActivity) { MapBaseActivity mapActivity = ((MapBaseActivity) tempActivity); if (mapActivity.isSupportAction(action)) { mapActivity.doAction(action); if (API_MAP_SETTING.equals(api)) { if ("end_navigation".equals(action)) { displayText = "导航结束"; } else { ttsText = getOkAnswer(); } } else if (API_MAP_QUERY.equals(api)) { displayText = "查询中..."; } } else { ttsText = "当前版本暂不支持此功能"; } } else { ttsText = "仅地图页面支持此功能"; } } 这段代码中的String action1 = object.getString("action");只有在某个fragment中查询“添加加油站为途经点”命令后,才会返回,我这样写的话,我首次进入搜索POI页面没反应,该怎么修改?

2023-05-30 上传
2023-06-09 上传