|
如题,看规则报告就会发现这个问题:
登录成功以后,还没开始上传图片,就会先生成文章内容,等执行完上传图片以后,会发现最后发布内容里面图片地址还是上次发布的地址
■■■■■■■■[16:33:58] 文章内容 【处理前】:
JavaScript 程序采用了异步事件驱动编程(Event-driven programming)模型。
<CENTER><IMG alt="WEB前端-JavaScript 浏览器事件解析" src="http://**/uploadfile/2018/0417/20180417042135364.jpg" width=600 height=338></CENTER>
维基百科对它的解释是:事件驱动程序设计(英语:Event-driven programming)是一种电脑程序设计模型。这种模型的程序运行流程是由用户的动作(如鼠标的按键,键盘的按键动作)或者是由其他程序的消息来决定的。相对于批处理程序设计(batch programming)而言,程序运行的流程是由程序员来决定。批量的程序设计在初级程序设计教学课程上是一种方式。然而,事件驱动程序设计这种设计模型是在交互程序(Interactive program)的情况下孕育而生的。
简页言之,在 web 前端编程里面 JavaScript 通过浏览器提供的事件模型 API 和用户交互,接收用户的输入
由于用户的行为是不确定的,也就是说不知道用户什么时候发生点击、滚动这些动作。这种场景是传统的同步编程模型没法解决的,因为你不可能等用户操作完了才执行后面的代码
比如我们在 Python 里面调用接收用户输入的方法 raw_input() 后终端就会一直等待用户的输入,直到输入完成才会执行后面的代码逻辑。但是在下面这段 NodeJS 代码中,接收用户输入的方法 process.stdin.read 是在一个事件中调用的。后面的代码不会被阻塞(blocked)。
事件驱动程序模型基本的实现原理基本上都是使用 事件循环(Event Loop),这部分内容涉及浏览器事件模型、回调原理,有兴趣的去看链接里面的视频学习下
需要说明的是在客户端 JavaScript 中像 setTimeout, XMLHTTPRequest 这类 API 并不是 JavaScript 语言本身就有的。而是 JavaScript 的宿主环境(在客户端 JavaScript 中就是浏览器),同样像 DOM、BOM、Event API 都是浏览器提供的
事件绑定的方法
<CENTER><IMG alt="WEB前端-JavaScript 浏览器事件解析" src="http://****/uploadfile/2018/0417/20180417042137846.jpg" width=600 height=338></CENTER>
■■■■■■■■[16:33:58] 文章内容 【处理后】: 銆?銆?JavaScript 绋嬪簭閲囩敤浜嗗紓姝ヤ簨浠堕┍鍔ㄧ紪绋?Event-driven programming)妯″瀷銆?
<CENTER><IMG alt="WEB鍓嶇-JavaScript 娴忚鍣ㄤ簨浠惰В鏋? src="http://****/uploadfile/2018/0417/20180417042135364.jpg" width=600 height=338></CENTER>
銆?銆?缁村熀鐧剧瀵瑰畠鐨勮В閲婃槸锛氫簨浠堕┍鍔ㄧ▼搴忚璁?鑻辫锛欵vent-driven programming)鏄竴绉嶇數鑴戠▼搴忚璁℃ā鍨嬨?傝繖绉嶆ā鍨嬬殑绋嬪簭杩愯娴佺▼鏄敱鐢ㄦ埛鐨勫姩浣?濡傞紶鏍囩殑鎸夐敭锛岄敭鐩樼殑鎸夐敭鍔ㄤ綔)鎴栬?呮槸鐢卞叾浠栫▼搴忕殑娑堟伅鏉ュ喅瀹氱殑銆傜浉瀵逛簬鎵瑰鐞嗙▼搴忚璁?batch programming)鑰岃█锛岀▼搴忚繍琛岀殑娴佺▼鏄敱绋嬪簭鍛樻潵鍐冲畾銆傛壒閲忕殑绋嬪簭璁捐鍦ㄥ垵绾х▼搴忚璁℃暀瀛﹁绋嬩笂鏄竴绉嶆柟寮忋?傜劧鑰岋紝浜嬩欢椹卞姩绋嬪簭璁捐杩欑璁捐妯″瀷鏄湪浜や簰绋嬪簭(Interactive program)鐨勬儏鍐典笅瀛曡偛鑰岀敓鐨勩??
銆?銆?绠?椤佃█涔嬶紝鍦?web 鍓嶇缂栫▼閲岄潰 JavaScript 閫氳繃娴忚鍣ㄦ彁渚涚殑浜嬩欢妯″瀷 API 鍜岀敤鎴蜂氦浜掞紝鎺ユ敹鐢ㄦ埛鐨勮緭鍏?
銆?銆?鐢变簬鐢ㄦ埛鐨勮涓烘槸涓嶇‘瀹氱殑锛屼篃灏辨槸璇翠笉鐭ラ亾鐢ㄦ埛浠?涔堟椂鍊欏彂鐢熺偣鍑汇?佹粴鍔ㄨ繖浜涘姩浣溿?傝繖绉嶅満鏅槸浼犵粺鐨勫悓姝ョ紪绋嬫ā鍨嬫病娉曡В鍐崇殑锛屽洜涓轰綘涓嶅彲鑳界瓑鐢ㄦ埛鎿嶄綔瀹屼簡鎵嶆墽琛屽悗闈㈢殑浠g爜
銆?銆?姣斿鎴戜滑鍦?Python 閲岄潰璋冪敤鎺ユ敹鐢ㄦ埛杈撳叆鐨勬柟娉?raw_input() 鍚庣粓绔氨浼氫竴鐩寸瓑寰呯敤鎴风殑杈撳叆锛岀洿鍒拌緭鍏ュ畬鎴愭墠浼氭墽琛屽悗闈㈢殑浠g爜閫昏緫銆備絾鏄湪涓嬮潰杩欐 NodeJS 浠g爜涓紝鎺ユ敹鐢ㄦ埛杈撳叆鐨勬柟娉?process.stdin.read 鏄湪涓?涓簨浠朵腑璋冪敤鐨勩?傚悗闈㈢殑浠g爜涓嶄細琚樆濉?blocked)銆?
銆?銆?浜嬩欢椹卞姩绋嬪簭妯″瀷鍩烘湰鐨勫疄鐜板師鐞嗗熀鏈笂閮芥槸浣跨敤 浜嬩欢寰幆(Event Loop)锛岃繖閮ㄥ垎鍐呭娑夊強娴忚鍣ㄤ簨浠舵ā鍨嬨?佸洖璋冨師鐞嗭紝鏈夊叴瓒g殑鍘荤湅閾炬帴閲岄潰鐨勮棰戝涔犱笅
銆?銆?闇?瑕佽鏄庣殑鏄湪瀹㈡埛绔?JavaScript 涓儚 setTimeout, XMLHTTPRequest 杩欑被 API 骞朵笉鏄?JavaScript 璇█鏈韩灏辨湁鐨勩?傝?屾槸 JavaScript 鐨勫涓荤幆澧?鍦ㄥ鎴风 JavaScript 涓氨鏄祻瑙堝櫒)锛屽悓鏍峰儚 DOM銆丅OM銆丒vent API 閮芥槸娴忚鍣ㄦ彁渚涚殑
銆?銆?浜嬩欢缁戝畾鐨勬柟娉?
<CENTER><IMG alt="WEB鍓嶇-JavaScript 娴忚鍣ㄤ簨浠惰В鏋? src="http://****/uploadfile/2018/0417/20180417042137846.jpg" width=600 height=338></CENTER>
■■■■■■■■[16:33:58] 发布协议头1 【处理前】: Content-Type: multipart/form-data; boundary=---------------------------229411053915738
■■■■■■■■[16:33:58] 发布协议头1 【处理后】: Content-Type: multipart/form-data; boundary=---------------------------229411053915738
■■■■■■■■[16:33:58] 发布提交网址1 【处理前】:
http://****/index.php?m=attachment&c=attachments&a=upload&module=content&catid={变量1}&dosubmit=1&CKEditor=content&CKEditorFuncNum=0&langCode=zh-cn
■■■■■■■■[16:33:58] 发布提交网址1 【处理后】:
http://****/index.php?m=attachment&c=attachments&a=upload&module=content&catid=82&dosubmit=1&CKEditor=content&CKEditorFuncNum=0&langCode=zh-cn
■■■■■■■■[16:33:58] 发布提交数据1 【处理前】:
-----------------------------229411053915738
Content-Disposition: form-data; name="upload"; filename="01.jpg"
Content-Type: image/jpeg
{文件}
-----------------------------229411053915738--
■■■■■■■■[16:33:58] 文件后缀: jpg
■■■■■■■■[16:33:58] 发布1文件目录 【处理前】: D:\*.jpg
■■■■■■■■[16:33:58] 发布1文件目录 【处理后】: D:\01.jpg
■■■■■■■■[16:33:58] 发布提交数据1 【处理后】:
-----------------------------229411053915738
Content-Disposition: form-data; name="upload"; filename="01.jpg"
Content-Type: image/jpeg
*这部分是字节集.无法显示*
-----------------------------229411053915738--
■■■■■■■■[16:33:59] 发布协议头3 【处理后】: Content-Type: multipart/form-data; boundary=---------------------------6966163005452
■■■■■■■■[16:33:59] 发布提交网址3 【处理前】:
http://****/index.php?m=attachment&c=attachments&a=upload&module=content&catid={变量1}&dosubmit=1&CKEditor=content&CKEditorFuncNum=0&langCode=zh-cn
■■■■■■■■[16:33:59] 发布提交网址3 【处理后】:
http://****/index.php?m=attachment&c=attachments&a=upload&module=content&catid=82&dosubmit=1&CKEditor=content&CKEditorFuncNum=0&langCode=zh-cn
■■■■■■■■[16:33:59] 发布提交数据3 【处理前】:
-----------------------------6966163005452
Content-Disposition: form-data; name="upload"; filename="02.jpg"
Content-Type: image/jpeg
{文件}
-----------------------------6966163005452--
■■■■■■■■[16:33:59] 文件后缀: jpg
■■■■■■■■[16:33:59] 发布3文件目录 【处理前】: D:\*.jpg
■■■■■■■■[16:33:59] 发布3文件目录 【处理后】: D:\02.jpg
■■■■■■■■[16:33:59] 发布提交数据3 【处理后】:
-----------------------------6966163005452
Content-Disposition: form-data; name="upload"; filename="02.jpg"
Content-Type: image/jpeg
*这部分是字节集.无法显示*
-----------------------------6966163005452--
(提交文件3 :D:\02.jpg)
■■■■■■■■[16:33:59] 发布提交网址3 【返回】:
<script type="text/javascript">window.parent.CKEDITOR.tools.callFunction(0, 'http://****/uploadfile/2018/0417/20180417043359733.jpg', '');</script>
■■■■■■■■[16:33:59] 发布提交3参数1 【正则 处理前】: callFunction\(0, '(.*?)'
■■■■■■■■[16:33:59] 发布提交3参数1 【正则 处理后】: callFunction\(0, '(.*?)'
■■■■■■■■[16:33:59] 发布提交3参数1 【正则 结果】: http://****/uploadfile/2018/0417/20180417043359733.jpg
■■■■■■■■[16:33:59] 发布成功特征3 【处理前】: uploadfile===上传图片成功
■■■■■■■■[16:33:59] 发布成功特征3 【处理后】: uploadfile===上传图片成功
■■■■■■■■[16:33:59] 发布协议头4 【处理前】: Content-Type: multipart/form-data; boundary=---------------------------23364195501457
■■■■■■■■[16:33:59] 发布协议头4 【处理后】: Content-Type: multipart/form-data; boundary=---------------------------23364195501457
■■■■■■■■[16:33:59] 发布提交网址4 【处理前】: http://****/index.php?m=content&c=content&a=add
■■■■■■■■[16:33:59] 发布提交网址4 【处理后】: http://****/index.php?m=content&c=content&a=add
■■■■■■■■[16:33:59] 发布提交数据4 【处理前】:
-----------------------------23364195501457
Content-Disposition: form-data; name="info[thumb]"
-----------------------------23364195501457
Content-Disposition: form-data; name="info[relation]"
-----------------------------23364195501457
Content-Disposition: form-data; name="info[inputtime]"
{时间=年}-{时间=月}-{时间=日} {时间=时}:{时间=分}:{时间=秒}
-----------------------------23364195501457
Content-Disposition: form-data; name="info[template]"
-----------------------------23364195501457
Content-Disposition: form-data; name="info[allow_comment]"
1
-----------------------------23364195501457
Content-Disposition: form-data; name="info[readpoint]"
-----------------------------23364195501457
Content-Disposition: form-data; name="info[paytype]"
0
-----------------------------23364195501457
Content-Disposition: form-data; name="status"
99
-----------------------------23364195501457
Content-Disposition: form-data; name="info[catid]"
82
-----------------------------23364195501457
Content-Disposition: form-data; name="info[title]"
111111
-----------------------------23364195501457
Content-Disposition: form-data; name="style_color"
-----------------------------23364195501457
Content-Disposition: form-data; name="style_font_weight"
-----------------------------23364195501457
Content-Disposition: form-data; name="info[keywords]"
-----------------------------23364195501457
Content-Disposition: form-data; name="info[description]"
-----------------------------23364195501457
Content-Disposition: form-data; name="info[content]"
{文章内容}
-----------------------------23364195501457
Content-Disposition: form-data; name="page_title_value"
-----------------------------23364195501457
Content-Disposition: form-data; name="add_introduce"
1
-----------------------------23364195501457
Content-Disposition: form-data; name="introcude_length"
200
-----------------------------23364195501457
Content-Disposition: form-data; name="auto_thumb"
1
-----------------------------23364195501457
Content-Disposition: form-data; name="auto_thumb_no"
1
-----------------------------23364195501457
Content-Disposition: form-data; name="info[paginationtype]"
0
-----------------------------23364195501457
Content-Disposition: form-data; name="info[maxcharperpage]"
10000
-----------------------------23364195501457
Content-Disposition: form-data; name="info[posids][]"
-1
-----------------------------23364195501457
Content-Disposition: form-data; name="info[groupids_view]"
1
-----------------------------23364195501457
Content-Disposition: form-data; name="info[islink]"
0
-----------------------------23364195501457
Content-Disposition: form-data; name="dosubmit"
保存后自动关闭
-----------------------------23364195501457
Content-Disposition: form-data; name="pc_hash"
{登录后提交1参数1}
-----------------------------23364195501457--
■■■■■■■■[16:33:59] 发布提交数据4 【处理后】:
-----------------------------23364195501457
Content-Disposition: form-data; name="info[thumb]"
-----------------------------23364195501457
Content-Disposition: form-data; name="info[relation]"
-----------------------------23364195501457
Content-Disposition: form-data; name="info[inputtime]"
2018-04-17 16:33:59
-----------------------------23364195501457
Content-Disposition: form-data; name="info[template]"
-----------------------------23364195501457
Content-Disposition: form-data; name="info[allow_comment]"
1
-----------------------------23364195501457
Content-Disposition: form-data; name="info[readpoint]"
-----------------------------23364195501457
Content-Disposition: form-data; name="info[paytype]"
0
-----------------------------23364195501457
Content-Disposition: form-data; name="status"
99
-----------------------------23364195501457
Content-Disposition: form-data; name="info[catid]"
82
-----------------------------23364195501457
Content-Disposition: form-data; name="info[title]"
111111
-----------------------------23364195501457
Content-Disposition: form-data; name="style_color"
-----------------------------23364195501457
Content-Disposition: form-data; name="style_font_weight"
-----------------------------23364195501457
Content-Disposition: form-data; name="info[keywords]"
-----------------------------23364195501457
Content-Disposition: form-data; name="info[description]"
-----------------------------23364195501457
Content-Disposition: form-data; name="info[content]"
銆?銆?JavaScript 绋嬪簭閲囩敤浜嗗紓姝ヤ簨浠堕┍鍔ㄧ紪绋?Event-driven programming)妯″瀷銆?
<CENTER><IMG alt="WEB鍓嶇-JavaScript 娴忚鍣ㄤ簨浠惰В鏋? src="http://****/uploadfile/2018/0417/20180417042135364.jpg" width=600 height=338></CENTER>
銆?銆?缁村熀鐧剧瀵瑰畠鐨勮В閲婃槸锛氫簨浠堕┍鍔ㄧ▼搴忚璁?鑻辫锛欵vent-driven programming)鏄竴绉嶇數鑴戠▼搴忚璁℃ā鍨嬨?傝繖绉嶆ā鍨嬬殑绋嬪簭杩愯娴佺▼鏄敱鐢ㄦ埛鐨勫姩浣?濡傞紶鏍囩殑鎸夐敭锛岄敭鐩樼殑鎸夐敭鍔ㄤ綔)鎴栬?呮槸鐢卞叾浠栫▼搴忕殑娑堟伅鏉ュ喅瀹氱殑銆傜浉瀵逛簬鎵瑰鐞嗙▼搴忚璁?batch programming)鑰岃█锛岀▼搴忚繍琛岀殑娴佺▼鏄敱绋嬪簭鍛樻潵鍐冲畾銆傛壒閲忕殑绋嬪簭璁捐鍦ㄥ垵绾х▼搴忚璁℃暀瀛﹁绋嬩笂鏄竴绉嶆柟寮忋?傜劧鑰岋紝浜嬩欢椹卞姩绋嬪簭璁捐杩欑璁捐妯″瀷鏄湪浜や簰绋嬪簭(Interactive program)鐨勬儏鍐典笅瀛曡偛鑰岀敓鐨勩??
銆?銆?绠?椤佃█涔嬶紝鍦?web 鍓嶇缂栫▼閲岄潰 JavaScript 閫氳繃娴忚鍣ㄦ彁渚涚殑浜嬩欢妯″瀷 API 鍜岀敤鎴蜂氦浜掞紝鎺ユ敹鐢ㄦ埛鐨勮緭鍏?
銆?銆?鐢变簬鐢ㄦ埛鐨勮涓烘槸涓嶇‘瀹氱殑锛屼篃灏辨槸璇翠笉鐭ラ亾鐢ㄦ埛浠?涔堟椂鍊欏彂鐢熺偣鍑汇?佹粴鍔ㄨ繖浜涘姩浣溿?傝繖绉嶅満鏅槸浼犵粺鐨勫悓姝ョ紪绋嬫ā鍨嬫病娉曡В鍐崇殑锛屽洜涓轰綘涓嶅彲鑳界瓑鐢ㄦ埛鎿嶄綔瀹屼簡鎵嶆墽琛屽悗闈㈢殑浠g爜
銆?銆?姣斿鎴戜滑鍦?Python 閲岄潰璋冪敤鎺ユ敹鐢ㄦ埛杈撳叆鐨勬柟娉?raw_input() 鍚庣粓绔氨浼氫竴鐩寸瓑寰呯敤鎴风殑杈撳叆锛岀洿鍒拌緭鍏ュ畬鎴愭墠浼氭墽琛屽悗闈㈢殑浠g爜閫昏緫銆備絾鏄湪涓嬮潰杩欐 NodeJS 浠g爜涓紝鎺ユ敹鐢ㄦ埛杈撳叆鐨勬柟娉?process.stdin.read 鏄湪涓?涓簨浠朵腑璋冪敤鐨勩?傚悗闈㈢殑浠g爜涓嶄細琚樆濉?blocked)銆?
銆?銆?浜嬩欢椹卞姩绋嬪簭妯″瀷鍩烘湰鐨勫疄鐜板師鐞嗗熀鏈笂閮芥槸浣跨敤 浜嬩欢寰幆(Event Loop)锛岃繖閮ㄥ垎鍐呭娑夊強娴忚鍣ㄤ簨浠舵ā鍨嬨?佸洖璋冨師鐞嗭紝鏈夊叴瓒g殑鍘荤湅閾炬帴閲岄潰鐨勮棰戝涔犱笅
銆?銆?闇?瑕佽鏄庣殑鏄湪瀹㈡埛绔?JavaScript 涓儚 setTimeout, XMLHTTPRequest 杩欑被 API 骞朵笉鏄?JavaScript 璇█鏈韩灏辨湁鐨勩?傝?屾槸 JavaScript 鐨勫涓荤幆澧?鍦ㄥ鎴风 JavaScript 涓氨鏄祻瑙堝櫒)锛屽悓鏍峰儚 DOM銆丅OM銆丒vent API 閮芥槸娴忚鍣ㄦ彁渚涚殑
銆?銆?浜嬩欢缁戝畾鐨勬柟娉?
<CENTER><IMG alt="WEB鍓嶇-JavaScript 娴忚鍣ㄤ簨浠惰В鏋? src="http://****/uploadfile/2018/0417/20180417042137846.jpg" width=600 height=338></CENTER>
-----------------------------23364195501457
Content-Disposition: form-data; name="page_title_value"
-----------------------------23364195501457
Content-Disposition: form-data; name="add_introduce"
1
-----------------------------23364195501457
Content-Disposition: form-data; name="introcude_length"
200
-----------------------------23364195501457
Content-Disposition: form-data; name="auto_thumb"
1
-----------------------------23364195501457
Content-Disposition: form-data; name="auto_thumb_no"
1
-----------------------------23364195501457
Content-Disposition: form-data; name="info[paginationtype]"
0
-----------------------------23364195501457
Content-Disposition: form-data; name="info[maxcharperpage]"
10000
-----------------------------23364195501457
Content-Disposition: form-data; name="info[posids][]"
-1
-----------------------------23364195501457
Content-Disposition: form-data; name="info[groupids_view]"
1
-----------------------------23364195501457
Content-Disposition: form-data; name="info[islink]"
0
-----------------------------23364195501457
Content-Disposition: form-data; name="dosubmit"
保存后自动关闭
-----------------------------23364195501457
Content-Disposition: form-data; name="pc_hash"
meXGWG
-----------------------------23364195501457--
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
总结:
发布图片地址1: http://**/uploadfile/2018/0417/20180417042135364.jpg
发布图片地址2: http://**/uploadfile/2018/0417/20180417042137846.jpg
上传图片返回地址1: http://**/uploadfile/2018/0417/20180417043358539.jpg
上传图片返回地址2: http://**/uploadfile/2018/0417/20180417043359733.jpg
不知道有没有人遇到同样的问题????????? |
|