JavaScript中检测变量是否存在

在编写JavaScript程序时往往需要检测某一变量是否存在,这是一件非常简单的工作,但如果不细心也会遇到一些问题。主要有一些几点:

1、普通变量

<script type=”text/javascript”>
if(variable){
alert(‘rain man’);
}
</script>

这时会出现‘variable is not defined’的错误,如果改成下面就会弹出预期的对话框:

<script type=”text/javascript”>
if( typeof variable == ‘undefined’ ){
alert(‘rain man’);
}
</script>

继续阅读“JavaScript中检测变量是否存在”

Jquery动态加载css文件/js文件

第一种写法:
$(“<link>”)
.attr({ rel: “stylesheet”,
type: “text/css”,
href: “site.css”
})
.appendTo(“head”);
第二种写法:
$(“head”).append(“<link>”);
css = $(“head”).children(“:last”);
css.attr({
rel: “stylesheet”,
type: “text/css”,
href: “/Content/Site.css”
});
第三种写法(直接在javascript中使用):
function addCSS() {
var link = document.createElement(‘link’);
link.type = ‘text/css’;
link.rel = ‘stylesheet’;
link.href = ‘/Content/Site.css’;
document.getElementsByTagName(“head”)[0].appendChild(link);
}

 

 

jQuery JavaScript

jQuery内置了一个方法可以加载单一的js文件;当加载完成后你可以在回调函数里执行后续操作。最基本的使用jQuery.getScript的方法是这样:

jQuery.getScript("/path/to/myscript.js", function(data, status, jqxhr) {

	/* 
		做一些加载完成后需要执行的事情
	*/	

});

这个getScript方法返回一个jqxhr,你可以像下面这样用它:

jQuery.getScript("/path/to/myscript.js")
	.done(function() {
		/* 耶,没有问题,这里可以干点什么 */
	})
	.fail(function() {
		/* 靠,马上执行挽救操作 */
});

最常见的使用jQuery.getScript的地方是延迟加载一个js插件,而且在加载完成时执行它:

jQuery.getScript("jquery.cookie.js")
	.done(function() {
		jQuery.cookie("cookie_name", "value", { expires: 7 });
});

如果你需要更高级的功能,比如加载多个脚本,或加载不同类型的文件(文本文件,图片,css等),我建议你使用一个专门的JavaScript加载工具。如果是为了延迟加载一个js插件,避免每个页面都去加载,这个getScript很完美了。

缓存问题

有一个非常重要的问题,使用jQuery.getScript时,你需要用一个时间戳字符串跟在需要加载的js地址后面,防止它被缓存。但是,如果你希望这个脚本被缓存,你需要设置全局缓存变量,像下面这样:

jQuery.ajaxSetup({
  cache: true
});

如果你并不想使用全局缓存变量,你也可以使用jQuery.ajax,并注明dataTypescript

jQuery.ajax({
      url: "jquery.cookie.js",
      dataType: "script",
      cache: true
}).done(function() {
		jQuery.cookie("cookie_name", "value", { expires: 7 });
});

参考:http://www.webhek.com/loading-scripts-jquery

JS的sort按照数值的大小对数字进行排序

按照数值的大小对数字进行排序,要实现这一点,就必须使用一个排序函数:

<script type=”text/javascript”>

function sortNumber(a,b) {
return a – b
}

var arr = new Array(6)
arr[0] = “10”
arr[1] = “5”
arr[2] = “40”
arr[3] = “25”
arr[4] = “1000”
arr[5] = “1”

document.write(arr + “<br />”)
document.write(arr.sort(sortNumber))

</script>

mysql 排除重复记录 insert 使用INSERT IGNORE into

INSERT IGNORE 与INSERT INTO的区别

INSERT IGNORE 与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。
eg:
insert ignore into table(name)  select  name from table2

sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory

在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。
分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。
解决:1)在windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File–>Conversions–>DOS->UNIX即可。
2)也可在Linux中转换:
首先要确保文件有可执行权限
#sh>chmod a+x filename
然后修改文件格式
#sh>vi filename
利用如下命令查看文件格式
:set ff 或 :set fileformat
可以看到如下信息
fileformat=dos 或 fileformat=unix
利用如下命令修改文件格式
:set ff=unix 或 :set fileformat=unix
:wq (存盘退出)
最后再执行文件
#sh>./filename

转自:http://www.cnblogs.com/pipelone/archive/2009/04/17/1437879.html

vbox配置centos本机ssh登陆

一、配置centos网络

编辑文件:vim /etc/sysconfig/network-scripts/ifcfg-eth0  这里配置的是动态分配

DEVICE=eth1
BOOTPROTO=dhcp
HWADDR=08:00:27:af:36:c5
ONBOOT=yes

重启网络连接 service network restart

ifconfig查看:

eth1 Link encap:Ethernet HWaddr 08:00:27:AF:36:C5
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:feaf:36c5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4382 errors:0 dropped:0 overruns:0 frame:0
TX packets:4111 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:457075 (446.3 KiB) TX bytes:486436 (475.0 KiB)

获得虚拟机地址: 10.0.2.15

二、配置ssh

编辑文件: vim /etc/ssh/sshd_config

打开端口号: Port 3600 #默认端口号为22

打开portocol: Protocol 2 #可选1或者2

保存退出

开启ssh服务: service sshd start

三、设置vbox网卡,端口转发规则

1.点击设置,进入设置选项卡

1_opt

2.选中网络,连接方式选中“网络地址转换(NAT)”,点击  端口转发 进入端口转发规则选项卡

2_opt

3.点击绿色加号按钮,填写相应信息。主机ip:本机虚拟ip地址;子系统ip:虚拟机ip地址

3_opt

四、配置xshell,进行连接

注意:主机地址为本机虚拟ip

4

CentOS Linux解决Device eth0 does not seem to be present

CentOS Linux解决Device eth0 does not seem to be present

一,问题描述

在VMware里克隆出来的CentOS Linux。。

ifconfig…没有看到eth0.。然后重启网卡又报下面错误。

故障现象:

service network restart
Shutting down loopback insterface: [ OK ]
Bringing up loopback insterface: [ OK ]
Bringing up interface eth0: Device eth0 does not seem to be present,delaying initialization. [FAILED]

132209467.jpg

二,解决办法

1;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
首先,打开/etc/udev/rules.d/70-persistent-net.rules内容如下面例子所示:
# vi /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:8f:89:9
7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:50:bd:1
7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
记录下,eth1网卡的mac地址00:0c:29:50:bd:17
接下来,打开/etc/sysconfig/network-scripts/ifcfg-eth0
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
将 DEVICE="eth0"  改成  DEVICE="eth1"  ,
将 HWADDR="00:0c:29:8f:89:97" 改成上面的mac地址  HWADDR="00:0c:29:50:bd:17"
最后,重启网络
# service network restart
或者
# /etc/init.d/network restart
正常了。

2;

1
、删除/etc/udev/rules.d/70-persistent-net.rules文件,重启系统。

3;

1
2
3
、如果上面的不起作用
    (1), ifconfig 查看HWADDR的值
    (2), /etc/sysconfig/network-script/ifcfg-eth1中修改ifconfig中查出的HWADDR值;

本文出自 “好好活着” 博客,请务必保留此出处http://wolfword.blog.51cto.com/4892126/1304000

继续阅读“CentOS Linux解决Device eth0 does not seem to be present”

for语句

使用PHP的for循环,需要记住以下几点规则。

  • 第一个表达式在第一次循环时自动计算。
  • 第二个表达式在每次循环时进行计算。这个表达式确定是否继续循环。
  • 第三个表达式在每次循环结束时计算。
  • 任何一个表达式都可以为空,它们可以由for块内部的逻辑所取代。
for ($kilometers = 1; $kilometers <= 5; $kilometers++) {
    printf('%d kilometers = %f miles <br />', $kilometers, $kilometers*0.62140);
}

for ($kilometers = 1; ; $kilometers++) {
    if ($kilometers > 5) break;
    printf('%d kilometers = %f miles <br />', $kilometers, $kilometers*0.62140);
}

$kilometers = 1;
for (; ; ){
    if ($kilometers > 5) break;
    printf('%d kilometers = %f miles <br />', $kilometers, $kilometers*0.62140);
    $kilometers++;
}

三个结果都如下:

1 kilometers = 0.621400 miles
2 kilometers = 1.242800 miles
3 kilometers = 1.864200 miles
4 kilometers = 2.485600 miles
5 kilometers = 3.107000 miles

heredoc语法

heredoc语法为输出大量文本提供了一种便利的方式。它不是使用双引号或单引号来界定字符串,而是采用了两个相同的标识符。

$website = ‘http://www.mangolau.com’;
echo <<<HTML
<p>What a good day!<a href=”$website”>Click here</a></p>
HTML;

关于这个例子,有几个值得注意的地方。

开始和结束标识符必须相同,此示例中的开始和结束标识符是HTML,可以选择你喜欢的任何开始和结束标识符,但要求它们必须完全相同。唯一的限制是该标识符只能由字母数字和下划线组成,而且前面不能有空格或任何其他多余的字符。此外,开始或结束标识符后面的任何空格都会导致语法错误。

PHP编程中10个最常见的错误

错误1:foreach循环后留下悬挂指针

在foreach循环中,如果我们需要更改迭代的元素或是为了提高效率,运用引用是一个好办法:

$arr = array(1, 2, 3, 4);

foreach ($arr as &$value) {

$value = $value * 2;

}

// $arr is now array(2, 4, 6, 8)

这里有个问题很多人会迷糊。循环结束后,$value并未销毁,$value其实是数组中最后一个元素的引用,这样在后续对$value的使用中,如果不知道这一点,会引发一些莫名奇妙的错误:)看看下面这段代码:

$array = [1, 2, 3];

echo implode(‘,’, $array), “\n”;

foreach ($array as &$value) {} // by reference

echo implode(‘,’, $array), “\n”;

foreach ($array as $value) {} // by value (i.e., copy)

echo implode(‘,’, $array), “\n”;

上面代码的运行结果如下:

1,2,3

1,2,3

1,2,2

你猜对了吗?为什么是这个结果呢? 继续阅读“PHP编程中10个最常见的错误”