- thinkphp ajax路径问题,thinkphp框架ajax返回问题 | 严佳冬
李创奇
thinkphpajax路径问题
前天发布了自己写的博客系统YBlog的第一个版本,后台在上传图片的时候并没有使用Ajax请求,在更新下一个版本的时候打算使用上传ajax请求,但是thinkphp框架自带的ajaxReturn方法返回的并不是我所需要的json对象,看下图:视图中的代码是这样的:$("#upload").ajaxfileupload({'action':'__CONTROLLER__/uploadAjax','pa
- laravel-ajaxfileupload上传图片并保存到服务器本地文件夹
做个优秀的代码搬运工
使用框架:laravel+layui插件地址:ajaxfileupload.js若失效自行百度laravel图片处理插件:【扩展推荐】Intervention/image图片处理JS代码//添加汽修厂$(".addShop").click(function(){varparams={};params.shop_fileimg=$('#shopImg').val();params.shop_file
- input输入框file类型第二次不触发onchange事件
jianghaha2011
js前端javascripthtml5
input输入框file类型第二次不触发onchange事件的根本原因:原来是ajaxFileUpload插件造成的,它会把原来的file元素替换成新的file元素,所以之前绑定的change事件就失效了。上传时,当第二次点击同一个文件,由于value值没有发生变化,无法触发change/onchange事件。所以,问题的关键是input的value值,只需要在选择一次后将input标签的valu
- ajaxFileUpload 异步上传文件简单使用
小林望北
WEB开发ajaxfileuploaduploadajax
Inserttitlehere$(function(){//点击打开文件选择器$("#upload").on('click',function(){$('#fileToUpload').click();});//选择文件之后执行上传$('#fileToUpload').on('change',function(){$.ajaxFileUpload({url:'../FileUploadServle
- ajaxFileUpload上传文件时,自定义参数data后台获取为null的问题
lifeisfloat
ajaxFileUpload自定义参数,后台获取的时候为null解决办法:修改ajaxFileUpload.js文件中createUploadForm()函数,新增传入参数data,并创建hidden控件,存储自定义参数createUploadForm:function(id,fileElementId,data){....if(data){for(variindata){$('').append
- ajaxfileupload struts2 null_去掉烦人的 “ ! = null " (判空语句)
weixin_39590739
ajaxfileuploadstruts2nullcurl_execreturnnullevalastringwithnullhiveif语句htmlif语句isnull优化
来自:CSDN作者:lizeyang原文链接:blog.csdn.net/lizeyang/article/details/40040817问题为了避免空指针调用,我们经常会看到这样的语句...if(someobject!=null){someobject.doCalc();}...最终,项目中会存在大量判空代码,多么丑陋繁冗!如何避免这种情况?我们是否滥用了判空呢?精华回答:这是初、中级程序猿经
- js文件夹上传到服务器,js 上传img到服务器
物理老卢
js文件夹上传到服务器
jQuery插件之ajaxFileUpload前端视图,HTML与JS代码,成功上传后,返回图片真实地址并绑定到的SRC地址lt;head>lt;scriptsrc="/jquery-1.7.1.js"type="text/javascript">lt;script>lt;scriptsrc="/...文章wenvi_wu2015-01-031318浏览量jQuery插件之ajaxFileUplo
- JAVA利用FTP文件服务器上传的记录.
不规则颜色
后台管理
首先:一个基础简单的上传页面,异步上传.注意-->使用的是ajaxfileupload.js,需要下载.最基础页面准备:FTP测试选择资源后,点击按钮上传上传functionajaxFileUpload(){alert("----------");$.ajaxFileUpload({url:'http://192.168.0.226:8086/admin/test/uploadFile.do',/
- JQuery的AJAX与Spring MVC实现异步文件上传
河马开源
更多文章请进入:我的开源网需要:ajaxfileupload.js包jquery包这里还用到了jqueryeasyuiaction代码:packagecom.cjh.action;importjava.io.File;importjava.util.UUID;importjavax.servlet.http.HttpServletRequest;importorg.springframework.
- 通过ajaxFileUpload异步请求上传文件(ajaxFileUpload+servlet实现文件上传下载)
雾林小妖
JavaScripthtml5htmljavajavascriptajax
1、最终效果实现选择图片(此处以图片为例,支持所有类型文件的上传),选择之后将选择的图片在页面中显示出来,点击上传,可以将文件上传到指定的地址中,上传成功后在当前页面自动显示下载标签。源码下载地址:链接:https://pan.baidu.com/s/17G63S9rkfFIfGBqwCwUHaA提取码:52b72、技术结构eclipse+servlet+ajaxFileUpload+window
- ajaxfileupload+bootstrap-fileupload.js实现文件上传bug修复总结
我是7788
今天下修改了一个bug是ajaxfileupload+bootstrap-fileupload.js实现文件上传,由于ajaxFileUpload把原来的file元素替换成新的file元素造成bootstrap-fileupload.js组件失效,在此记录一下:以下是标准的实现方式:----------------------------------------------------1.ajax
- 使用ajaxFileUpload上传文件流至服务器,同时提交多个参数
ssg-123
服务器文件ajaxfileuploa
1.前端界面引入如下两个js文件,注意引入顺序,因为ajaxfileupload会用到jquery,所以jquery应该先引入申请单号:合同文件:2.修改ajaxfileupload.js成如下jQuery.extend({createUploadIframe:function(id,uri){//createframevarframeId='jUploadFrame'+id;if(window.
- 常用的两种ajax上传文件的方式
fenglingcompany
web前台javascriptjsonjavaViewUI
一,ajaxfileuploadfunctiongetValue(){document.getElementById('appFilename').value=document.getElementById('appFile').value;validateImage();ajaxFileUpload();}functionajaxFileUpload(){/*$("#loading").ajax
- Thinkphp结合ajaxFileUpload实现ajax异步图片传输全套代码
目录1、引用文件2、HTML代码3、JS代码4、后台处理(PHP)5、前台调用这篇文章主要给大家介绍了利用Thinkphp结合ajaxFileUpload实现异步图片传输的方法,文中给出了详细的示例代码,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。使用Jquery的ajaxFileUpload的图片上传插件,感觉这种异步上传的方式非常好用接下来就介绍一下这个插件的使用。通过查看插件的源
- 使用JQuery ajaxFileUpload.js上传文件踩坑记录
杳杳靈鳯
前言最近在做前端的时候要实现文件上传的功能,用了form和jquery的ajax传值效果都不理想,最后采用了ajaxFileUpload.js这个前端脚本来实现。在使用的时候遇到了几个坑,一路摸着石头过河,也算是解决了问题,遂记录下来。这个功能在实际工作种经常用到,希望能给需要做这方面的人有些帮助。ajaxFileUpload.js有很多同名的,网上很好找到。我附上一个我使用的版本。https:/
- asp.net使用ajaxFileUpload插件上传文件(附源码)
ajaxFileUpload.js很多同名的,因为做出来一个很容易。我用的是这个:https://github.com/carlcarl/AjaxFileUpload下载地址在这里:http://xiazai.jb51.net/201701/yuanma/ajaxfileupload(jb51.net).rarAjaxFileUpload.js并不是一个很出名的插件,只是别人写好的放出来供大家用,
- ajax实现图片的回显功能
一只Java小白1111
javaWebjavaajaxjavascript
前端页面给文件上传域绑定一个改变事件图片介绍选择图片后通过ajax发送请求到服务端,把图片进行存储并且返回json数据,使得图片回显functionfileChange(){$.ajaxFileUpload({url:"${pageContext.request.contextPath}/prod/ajaxImg.action",secureuri:false,fileElementId:'pim
- 异步上传
九思而行
网上有很多异步上传的插件,但是正好找到了这个资源在就这说明一下。网上很多ajaxfileupload.js,但是我在下载使用之后总是有这样或那样的问题,就想先把这放在这圣诞以后找了,不多说直接上代码。引入jquery和ajaxfileupload.jshtmljs$.ajaxFileUpload({url:"addProject",type:'post',data:{form_qvyv:$("#f
- AjaxFileUpload实现文件上传
滴雨幻想
此例为maven项目,实现学生模块中简历的上传操作。所用框架为SSM框架。此处将下载文件、删除文件的方法统一展示,因为这是上传配套的功能,不作另外阐述。AjaxFileUpload.js文件可在百度自行下载,下载后放入项目中,并在页面中引用即可。1.JSP构建一个隐藏的文件域,当点击上传简历时,模拟点击文件域,弹窗文件选择框;下载文件仅是做了一个超链接,指向后台下载请求地址,同时将fileId作为
- Web端裁剪图片方法
流云
由于在Web端,JavaScript不能直接处理本地文件,因此可以在后台裁剪图片,或者利用html5的canvas来处理。方法1:传送到后台剪切步骤1:上传图片到后台,向前端返回图片URL利用input标签,将文件发送到后台。可以使用jQuery中的ajaxFileUpload方法$.ajaxFileUpload({url:'live/apply/uploadImage',//用于文件上传的服务器
- jquery实现异步文件上传ajaxfileupload.js
本文实例为大家分享了jquery实现异步文件上传的具体代码,供大家参考,具体内容如下ajaxfileupload.js异步上传文件:直接引用。调用方法:$.ajaxFileUpload({url:'',//后台接口地址type:"post",secureuri:false,//一般设置为falsefileElementId:'ofx',//上传文件的id、name属性名dataType:'json
- ajaxfileupload 异步下载文件
a_good_job
@ResponseBody@RequestMapping(value="ajaxFileUpload",method={RequestMethod.POST,RequestMethod.GET})publicStringajaxFileUpload(Modelmodel,HttpServletResponseresponse,@RequestParamMultipartFilemyfile,Htt
- 在linux上创建nfs遇到的问题。
渭水飞熊
Linux
我们部署程序时,图片服务器是单独的一台服务器,有自己独立的域名。而应用部署在另一台服务器上,我们使用一些附件上传工具,比如ajaxfileupload上传附件时是无法跨域访问的。之前想的方案是,先上传到应用所在的服务器,然后使用java的ftp组件上传到图片服务器上(当然了,图片服务器上安装了ftp服务端)。可是后来发现ftp上传比较慢而且不稳定,决定换成NFS来解决这个问题,当然了这个方案到底是
- ajaxFileUpload.js 无刷新上传图片,支持多个参数同时上传,支持 ie6-ie10
草青工作室
JQueryJavascript
ajaxFileUpload无刷新上传的原理:在页面动态创建form表单和ifram贞,设定form表单提交的目标为ifram贞,将文件域和要post的参数动态写入form表单中,然后提交from表单。通过window.attachEvent向ifram贞的onload事件中注册监听事件响应回调函数。1.html部分2.调用部分functionuploadImg(imgfileId,imgcont
- ajaxfileupload.js
Jon_jing
日常编程js
-------请注意,,不是原创,是我转载,但是不记得转载链接了,仅供使用谢谢,如果有知道转载出处的,请联系我----jQuery.extend({createUploadIframe:function(id,uri){//createframevarframeId='jUploadFrame'+id;variframeHtml='';jQuery(iframeHtml).appendTo(doc
- 关于前端html图片和文件上传和后台接收方法
第五轻轻
web前端java
前些时间项目和h5交互时涉及到了文件上传的一个功能,但是h5在写上传的时候总是上传不上,所以花时间专门看了下web端的文件上传记录下。第一种是前端写的,拿来修改了下,这种方法在上传的时候需要用到jquery.js和ajaxfileupload.js://获取图片本地urlfunctiongetObjectURL(file){varurl=null;if(window.createObjectURL
- jQ基础篇--jQuery插件ajaxfileupload.js源码与使用
weixin_34221036
jsonjavascript
在网页应用中,一般会用到上传文件或者图片什么的到服务器,那么可以用ajaxfileupload.js,但是在使用ajaxfileupload.js时候,当服务器返回的json带有&符号的时候,返回的data数据里面所有的&被转义成了&。下面的ajaxfileupload.js是经过修改的文件上传库。jQuery.extend({/**createUploadIframe创建上传的ifram
- ajaxfileupload文件上传返回值处理 ajaxfileupload.js + spring mvc文件上传
兴哥-bling
JavaScript
ajaxfileupload.js组件的确好用,但是那个返回值格式也太恶心了吧!让人家定义一个dataType:"json",最后给返回一堆html,什么意思?也许是鄙人愚钝,索性修改了下源代码的处理函数,手动返回json得了。修改代码:大约在ajaxfileupload.js的185行左右,有这么个函数:uploadHttpData原始代码与改后代码对比:uploadHttpData:funct
- 使用ajaxfileupload.js实现上传文件功能
徐小妖
java
一、ajaxFileUpload是一个异步上传文件的jQuery插件。语法:$.ajaxFileUpload([options])options参数说明:1、url上传处理程序地址2、fileElementId文件选择框的id属性,即的id3、secureuri是否启用安全提交,默认为false4、dataType服务器返回的数据类型。可以为xml,script,json,html。如果不填写,j
- jQuery插件AjaxFileUpload实现ajax文件上传
余_小凡
JQUERY
jQuery插件AjaxFileUpload用来实现ajax文件上传,该插件使用非常简单,接下来写个demo演示怎么用AjaxFileUpload插件实现文件上传。1、引入AjaxFileUpload插件相关的jsresources/js/jquery-1.2.1.js">resources/js/ajaxfileupload.js">备注:测试发现,ajaxfileupload对jQuery版本
- LeetCode[位运算] - #137 Single Number II
Cwind
javaAlgorithmLeetCode题解位运算
原题链接:#137 Single Number II
要求:
给定一个整型数组,其中除了一个元素之外,每个元素都出现三次。找出这个元素
注意:算法的时间复杂度应为O(n),最好不使用额外的内存空间
难度:中等
分析:
与#136类似,都是考察位运算。不过出现两次的可以使用异或运算的特性 n XOR n = 0, n XOR 0 = n,即某一
- 《JavaScript语言精粹》笔记
aijuans
JavaScript
0、JavaScript的简单数据类型包括数字、字符创、布尔值(true/false)、null和undefined值,其它值都是对象。
1、JavaScript只有一个数字类型,它在内部被表示为64位的浮点数。没有分离出整数,所以1和1.0的值相同。
2、NaN是一个数值,表示一个不能产生正常结果的运算结果。NaN不等于任何值,包括它本身。可以用函数isNaN(number)检测NaN,但是
- 你应该更新的Java知识之常用程序库
Kai_Ge
java
在很多人眼中,Java 已经是一门垂垂老矣的语言,但并不妨碍 Java 世界依然在前进。如果你曾离开 Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老 Java 中的新东西。
Guava
Guava[gwɑ:və],一句话,只要你做Java项目,就应该用Guava(Github)。
guava 是 Google 出品的一套 Java 核心库,在我看来,它甚至应该
- HttpClient
120153216
httpclient
/**
* 可以传对象的请求转发,对象已流形式放入HTTP中
*/
public static Object doPost(Map<String,Object> parmMap,String url)
{
Object object = null;
HttpClient hc = new HttpClient();
String fullURL
- Django model字段类型清单
2002wmj
django
Django 通过 models 实现数据库的创建、修改、删除等操作,本文为模型中一般常用的类型的清单,便于查询和使用: AutoField:一个自动递增的整型字段,添加记录时它会自动增长。你通常不需要直接使用这个字段;如果你不指定主键的话,系统会自动添加一个主键字段到你的model。(参阅自动主键字段) BooleanField:布尔字段,管理工具里会自动将其描述为checkbox。 Cha
- 在SQLSERVER中查找消耗CPU最多的SQL
357029540
SQL Server
返回消耗CPU数目最多的10条语句
SELECT TOP 10
total_worker_time/execution_count AS avg_cpu_cost, plan_handle,
execution_count,
(SELECT SUBSTRING(text, statement_start_of
- Myeclipse项目无法部署,Undefined exploded archive location
7454103
eclipseMyEclipse
做个备忘!
错误信息为:
Undefined exploded archive location
原因:
在工程转移过程中,导致工程的配置文件出错;
解决方法:
 
- GMT时间格式转换
adminjun
GMT时间转换
普通的时间转换问题我这里就不再罗嗦了,我想大家应该都会那种低级的转换问题吧,现在我向大家总结一下如何转换GMT时间格式,这种格式的转换方法网上还不是很多,所以有必要总结一下,也算给有需要的朋友一个小小的帮助啦。
1、可以使用
SimpleDateFormat SimpleDateFormat
EEE-三位星期
d-天
MMM-月
yyyy-四位年
- Oracle数据库新装连接串问题
aijuans
oracle数据库
割接新装了数据库,客户端登陆无问题,apache/cgi-bin程序有问题,sqlnet.log日志如下:
Fatal NI connect error 12170.
VERSION INFORMATION: TNS for Linux: Version 10.2.0.4.0 - Product
- 回顾java数组复制
ayaoxinchao
java数组
在写这篇文章之前,也看了一些别人写的,基本上都是大同小异。文章是对java数组复制基础知识的回顾,算是作为学习笔记,供以后自己翻阅。首先,简单想一下这个问题:为什么要复制数组?我的个人理解:在我们在利用一个数组时,在每一次使用,我们都希望它的值是初始值。这时我们就要对数组进行复制,以达到原始数组值的安全性。java数组复制大致分为3种方式:①for循环方式 ②clone方式 ③arrayCopy方
- java web会话监听并使用spring注入
bewithme
Java Web
在java web应用中,当你想在建立会话或移除会话时,让系统做某些事情,比如说,统计在线用户,每当有用户登录时,或退出时,那么可以用下面这个监听器来监听。
import java.util.ArrayList;
import java.ut
- NoSQL数据库之Redis数据库管理(Redis的常用命令及高级应用)
bijian1013
redis数据库NoSQL
一 .Redis常用命令
Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在Linux终端使用。
a.键值相关命令
b.服务器相关命令
1.键值相关命令
&
- java枚举序列化问题
bingyingao
java枚举序列化
对象在网络中传输离不开序列化和反序列化。而如果序列化的对象中有枚举值就要特别注意一些发布兼容问题:
1.加一个枚举值
新机器代码读分布式缓存中老对象,没有问题,不会抛异常。
老机器代码读分布式缓存中新对像,反序列化会中断,所以在所有机器发布完成之前要避免出现新对象,或者提前让老机器拥有新增枚举的jar。
2.删一个枚举值
新机器代码读分布式缓存中老对象,反序列
- 【Spark七十八】Spark Kyro序列化
bit1129
spark
当使用SparkContext的saveAsObjectFile方法将对象序列化到文件,以及通过objectFile方法将对象从文件反序列出来的时候,Spark默认使用Java的序列化以及反序列化机制,通常情况下,这种序列化机制是很低效的,Spark支持使用Kyro作为对象的序列化和反序列化机制,序列化的速度比java更快,但是使用Kyro时要注意,Kyro目前还是有些bug。
Spark
- Hybridizing OO and Functional Design
bookjovi
erlanghaskell
推荐博文:
Tell Above, and Ask Below - Hybridizing OO and Functional Design
文章中把OO和FP讲的深入透彻,里面把smalltalk和haskell作为典型的两种编程范式代表语言,此点本人极为同意,smalltalk可以说是最能体现OO设计的面向对象语言,smalltalk的作者Alan kay也是OO的最早先驱,
- Java-Collections Framework学习与总结-HashMap
BrokenDreams
Collections
开发中常常会用到这样一种数据结构,根据一个关键字,找到所需的信息。这个过程有点像查字典,拿到一个key,去字典表中查找对应的value。Java1.0版本提供了这样的类java.util.Dictionary(抽象类),基本上支持字典表的操作。后来引入了Map接口,更好的描述的这种数据结构。
&nb
- 读《研磨设计模式》-代码笔记-职责链模式-Chain Of Responsibility
bylijinnan
java设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/**
* 业务逻辑:项目经理只能处理500以下的费用申请,部门经理是1000,总经理不设限。简单起见,只同意“Tom”的申请
* bylijinnan
*/
abstract class Handler {
/*
- Android中启动外部程序
cherishLC
android
1、启动外部程序
引用自:
http://blog.csdn.net/linxcool/article/details/7692374
//方法一
Intent intent=new Intent();
//包名 包名+类名(全路径)
intent.setClassName("com.linxcool", "com.linxcool.PlaneActi
- summary_keep_rate
coollyj
SUM
BEGIN
/*DECLARE minDate varchar(20) ;
DECLARE maxDate varchar(20) ;*/
DECLARE stkDate varchar(20) ;
DECLARE done int default -1;
/* 游标中 注册服务器地址 */
DE
- hadoop hdfs 添加数据目录出错
daizj
hadoophdfs扩容
由于原来配置的hadoop data目录快要用满了,故准备修改配置文件增加数据目录,以便扩容,但由于疏忽,把core-site.xml, hdfs-site.xml配置文件dfs.datanode.data.dir 配置项增加了配置目录,但未创建实际目录,重启datanode服务时,报如下错误:
2014-11-18 08:51:39,128 WARN org.apache.hadoop.h
- grep 目录级联查找
dongwei_6688
grep
在Mac或者Linux下使用grep进行文件内容查找时,如果给定的目标搜索路径是当前目录,那么它默认只搜索当前目录下的文件,而不会搜索其下面子目录中的文件内容,如果想级联搜索下级目录,需要使用一个“-r”参数:
grep -n -r "GET" .
上面的命令将会找出当前目录“.”及当前目录中所有下级目录
- yii 修改模块使用的布局文件
dcj3sjt126com
yiilayouts
方法一:yii模块默认使用系统当前的主题布局文件,如果在主配置文件中配置了主题比如: 'theme'=>'mythm', 那么yii的模块就使用 protected/themes/mythm/views/layouts 下的布局文件; 如果未配置主题,那么 yii的模块就使用 protected/views/layouts 下的布局文件, 总之默认不是使用自身目录 pr
- 设计模式之单例模式
come_for_dream
设计模式单例模式懒汉式饿汉式双重检验锁失败无序写入
今天该来的面试还没来,这个店估计不会来电话了,安静下来写写博客也不错,没事翻了翻小易哥的博客甚至与大牛们之间的差距,基础知识不扎实建起来的楼再高也只能是危楼罢了,陈下心回归基础把以前学过的东西总结一下。
*********************************
- 8、数组
豆豆咖啡
二维数组数组一维数组
一、概念
数组是同一种类型数据的集合。其实数组就是一个容器。
二、好处
可以自动给数组中的元素从0开始编号,方便操作这些元素
三、格式
//一维数组
1,元素类型[] 变量名 = new 元素类型[元素的个数]
int[] arr =
- Decode Ways
hcx2013
decode
A message containing letters from A-Z is being encoded to numbers using the following mapping:
'A' -> 1
'B' -> 2
...
'Z' -> 26
Given an encoded message containing digits, det
- Spring4.1新特性——异步调度和事件机制的异常处理
jinnianshilongnian
spring 4.1
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
- squid3(高命中率)缓存服务器配置
liyonghui160com
系统:centos 5.x
需要的软件:squid-3.0.STABLE25.tar.gz
1.下载squid
wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE25.tar.gz
tar zxf squid-3.0.STABLE25.tar.gz &&
- 避免Java应用中NullPointerException的技巧和最佳实践
pda158
java
1) 从已知的String对象中调用equals()和equalsIgnoreCase()方法,而非未知对象。 总是从已知的非空String对象中调用equals()方法。因为equals()方法是对称的,调用a.equals(b)和调用b.equals(a)是完全相同的,这也是为什么程序员对于对象a和b这么不上心。如果调用者是空指针,这种调用可能导致一个空指针异常
Object unk
- 如何在Swift语言中创建http请求
shoothao
httpswift
概述:本文通过实例从同步和异步两种方式上回答了”如何在Swift语言中创建http请求“的问题。
如果你对Objective-C比较了解的话,对于如何创建http请求你一定驾轻就熟了,而新语言Swift与其相比只有语法上的区别。但是,对才接触到这个崭新平台的初学者来说,他们仍然想知道“如何在Swift语言中创建http请求?”。
在这里,我将作出一些建议来回答上述问题。常见的
- Spring事务的传播方式
uule
spring事务
传播方式:
新建事务
required
required_new - 挂起当前
非事务方式运行
supports
&nbs