回调函数

Scrapy框架----- Spiders

别说谁变了你拦得住时间么 提交于 2019-12-19 02:13:07
Spider Spider类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。 换句话说,Spider就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方。 class scrapy.Spider 是最基本的类,所有编写的爬虫必须继承这个类。 主要用到的函数及调用顺序为: __init__() : 初始化爬虫名字和start_urls列表 start_requests() 调用make_requests_from url() :生成Requests对象交给Scrapy下载并返回response parse() : 解析response,并返回Item或Requests(需指定回调函数)。Item传给Item pipline持久化 , 而Requests交由Scrapy下载,并由指定的回调函数处理(默认parse()),一直进行循环,直到处理完所有的数据为止。 源码参考 #所有爬虫的基类,用户定义的爬虫必须从这个类继承 class Spider(object_ref): #定义spider名字的字符串(string)。spider的名字定义了Scrapy如何定位(并初始化)spider,所以其必须是唯一的。 #name是spider最重要的属性,而且是必须的。 #一般做法是以该网站(domain)

原生 JavaScript 实现 AJAX、JSONP

雨燕双飞 提交于 2019-12-19 01:17:44
相信大多数前端开发者在需要与后端进行数据交互时,为了方便快捷,都会选择 JQuery 中封装的 AJAX 方法,但是有些时候,我们只需要 JQuery 的 AJAX 请求方法,而其他的功能用到的很少,这显然是没必要的。 其实,原生 JavaScript 实现 AJAX 并不难,这篇文章将会讲解如何实现简单的 AJAX ,还有跨域请求 JSONP ! 一、AJAX AJAX的核心是 XMLHttpRequest 。 一个完整的 AJAX 请求一般包括以下步骤: 实例化 XMLHttpRequest 对象 连接服务器 发送请求 接收响应数据 我将 AJAX 请求封装成 ajax() 方法,它接受一个配置对象 params 。 function ajax(params) { params = params || {}; params.data = params.data || {}; // 判断是ajax请求还是jsonp请求 var json = params.jsonp ? jsonp(params) : json(params); // ajax请求 function json(params) { // 请求方式,默认是GET params.type = (params.type || 'GET').toUpperCase(); // 避免有特殊字符,必须格式化传输数据

jsonp跨域请求

跟風遠走 提交于 2019-12-18 23:24:13
1.什么是跨域   跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。   所谓同源是指,域名,协议,端口均相同。 2.什么是jsonp   Jsonp其实就是一个跨域解决方案。Js跨域请求数据是不可以的,但是js跨域请求js脚本是可以的。可以把数据封装成一个js语句,做一个方法的调用。跨域请求js脚本可以得到此脚本。得到js脚本之后会立即执行。可以把数据做为参数传递到方法中。就可以获得数据。从而解决跨域问题。 3. jsonp的原理   浏览器在js请求中,是允许通过script标签的src跨域请求,可以在请求的结果中添加回调方法名,在请求页面中定义方法,既可获取到跨域请求的数据。 4.服务端代码 方式一:自己拼装返回结果 @ResponseBody public String getItemCatList(String callback) { //此处获取对象信息 CatResult catResult = itemCatService.getItemCatList(); //把pojo转换成json字符串 String json = JsonUtils.objectToJson(catResult); //拼装返回值//用回调函数名称包裹返回数据,这样,返回数据就作为回调函数的参数传回去了 String result =

以setTimeout来聊聊Event Loop

夙愿已清 提交于 2019-12-18 15:16:16
终于到了神话破灭的时刻…… 这注定是一篇“自取其辱”的博客,飞哥,你们眼中的大神,Duang,这次脸朝下摔地上了。 故事得从这个求助开始: e.returnValue 报错:未定义 ,“一起帮”现在人气还不够旺,碰到了我勉勉强强能够解决的问题,硬着头皮也得上啊!远程一看,问题不是e.returnValue没值,是e本身就没值。而更核心的问题是:这段代码,是被放在setTimeout()里面的。 (这里插一句:很多问题,就得远程,求助人贴出来的代码,根本就没抓住重点。话说,很多时候,要是能抓住问题的核心,问题也已经解决了一大半了。) 把代码简单化一下,代码大致应该是这样的: 1 <script> 2 function showEvent(){ 3 setTimeout( 4 function(){ 5 alert('in setTimeout:'+ event); 6 },100 7 ); 8 } 9 </script> 10 11 <input type="submit" name="Submit" value="提交" onclick="showEvent()" /> 点击提交按钮,就会看到:event 为 undefined。 凭着直觉,真的就是坑踩得太多的直觉,我飞快的解决了这个问题:在setTimeout()之前加一行代码,如下所示: 1 function

‎Cocos2d-x 学习笔记(20) ControlButton

元气小坏坏 提交于 2019-12-18 11:13:06
【Cocos2d-x 学习笔记 目录链接】 1. 简介 ControlButton实现了按钮功能,根据触摸的位置和移动的过程可识别9中EventType类型,执行对应的回调函数。 直接继承了Control。拥有9种EventType和4种State。 2. create 按钮的创建需要Label和Scale9Sprite。 构造函数: ControlButton::ControlButton() : _isPushed(false) , _parentInited(false) , _doesAdjustBackgroundImage(false) , _currentTitleColor(Color3B::WHITE) , _titleLabel(nullptr) , _backgroundSprite(nullptr) , _zoomOnTouchDown(false) , _marginV(ControlButtonMarginTB) , _marginH(ControlButtonMarginLR) {} 有5种重载的create方法 ControlButton* create(); ControlButton* create(cocos2d::ui::Scale9Sprite* sprite); ControlButton* create(Node* label,

微信小程序 API 界面(1)

≡放荡痞女 提交于 2019-12-18 02:35:54
  界面  有关屏幕的api   交互:     wx.showToast()  显示消息提示框  参数:object       object的属性:         title:类型  字符串  提示的内容(文本最多7个汉字)         icon:类型  字符串  图标           属性值:success:显示成功的图标               loading:显示加载的图标               none:不显示图标         image:类型  字符串  自定义图标的本地路径,image的优先级高于 icon         duration:类型  数字  提示延迟的时间         mask:类型  布尔  是否显示透明蒙层,防止触摸穿透         success:类型  函数  接口成功调用的回调函数         fail:类型  函数  接口调用失败的回调函数         complete:类型  函数  接口调用结束的回调函数(成功,失败,都会执行)     wx.showModal()  显示模态对话框(他拥有 确定按钮 和 取消按钮)  参数:object         object的属性:         title:类型  字符串  提示的标题         content:类型  字符串  提示的内容

ES6 Promise对象

做~自己de王妃 提交于 2019-12-18 02:33:07
Promise ,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。 Promise 对象有以下 两个 特点。 (1) 对象的状态不受外界影响。 Promise 对象代表一个异步操作,有三种状态: Pending (进行中)、 Resolved (已完 成,又称 Fulfilled )和 Rejected (已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这 个状态。 (2) 一旦状态改变,就不会再变,任何时候都可以得到这个结果。 Promise 对象的状态改变,只有两种可能: 从 Pending 变为 Resolved 和从 Pending 变为 Rejected 。 局限 : 无法取消 Promise ,一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函 数, Promise 内部抛出的 错误 , 不会反应到外部 。第三,当处于 Pending 状态时, 无法得知 目前 进展 到哪一个 阶段 (刚刚 开始还是即将完成)。 使用方法: Promise对象是一个构造函数,用来生成promise实例 var promise = new Promise(function(resolve, reject) { // ... some code if (/* 异步操作成功 */){ resolve(value); }

javascript中数组的map方法

不想你离开。 提交于 2019-12-17 23:17:52
map方法原型: array1.map(callbackfn[, thisArg]) 参数: array1, 必选。 一个数组对象。 该函数一般用于数组对象 callbackfn,必选。 最多可以接受三个参数的函数。 对于数组中的每个元素, map 方法都会调用 callbackfn 函数一次。 thisArg,可选。 callbackfn 函数中的 this 关键字可引用的对象 。 如果省略 thisArg,则 undefined 将用作 this 值。 返回值: 一个新数组,其中的每个元素均为关联的原始数组元素的回调函数返回值 。 说明: 对于数组中的每个元素,map 方法都会调用 callbackfn 函数一次(采用升序索引顺序) 。 将不会为数组中缺少的元素调用回调函数。 除了数组对象之外, map 方法可由具有 length 属性且具有已按数字编制索引的属性名的任何对象使用。 回调函数的语法如下所示: function callbackfn(value, index, array1) 你可使用最多三个参数来声明回调函数。 value,数组元素的值。 index,数组元素的数字索引。 array1,包含该元素的数组对象。 实例: // Define the callback function. function AreaOfCircle(radius) { var area

cocos2dx基础篇(5) 按钮

↘锁芯ラ 提交于 2019-12-17 14:37:05
这篇是直接复制的别人的,太多了,难得写。。。 【本节内容】 CCMenu、CCMenuItem 其具体的六个子类 【菜单CCMenu】 菜单 CCMenu 是用来装载菜单按钮的 图层 ,图层中的子节点只能够是菜单项CCMenuItem或其子类。一般我们先创建菜单项 CCMenuItem ,然后使用一个或多个菜单项生成菜单CCMenu,最后把CCMenu加入当前图层。 由于CCMenu的父类为CCLayer,锚点为(0,0),无法设置锚点。 CCMenu的默认原点坐标为屏幕正中心(winSize.width/2, winSize.height/2)。 CCMenuItem是添加在CCMenu层中的,所以CCMenuItem的位置是相对于CCMenu层的偏移位置。CCMenuItem相对于CCMenu的偏移量默认为(0,0),且菜单项的锚点默认为(0.5,0.5)。 常用操作: class CC_DLL CCMenu : public CCLayerRGBA { /** * 创建菜单的三个常用方法 */ //创建一个空菜单 static CCMenu* create(); //CCMenu::create(item1,item2,item3,NULL); //用CCMenuItem菜单项创建菜单,最后以NULL表示结束. static CCMenu* create(CCMenuItem