jQuery - noConflict() 方法

jquery和其他javascript框架

jquery使用$符号作为jquery的简写

其他一些js框架:mootools、backbone、sammy、cappuccino、knockout、javascript mvc、google web toolkit、google closure、ember、batman以及ext js

其中某些框架也是用$符号作为简写(就像jquery),如果用里的两种不同的框架正在使用的简写符号,有可能导致脚本停止运行。

jquery的团队考虑到了这个问题,并实现了noconflict()方法。

jquery noconflict()方法

该方法会释放对$标识符的控制,这样其他脚本就可以使用他了。

当然,也可以通过全名替代简写的方式来使用jquery


<!DOCTYPE html>
<html>
	<head>
		<script src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js"></script>
		<meta charset="UTF-8">
<script>
	$.noConflict();
	jQuery(document).ready(function(){
		jQuery("button").click(function(){
			jQuery("p").text("jquery");
		});
	});
</script>
	</head>
	<body>
		<p>好的</p>
		<button>确定</button>
	</body>
</html>

您也可以创建自己的简写。noConflict() 可返回对 jQuery 的引用,您可以把它存入变量,以供稍后使用。请看这个例子:

<!DOCTYPE html>
<html>
	<head>
		<script src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js"></script>
		<meta charset="UTF-8">
<script>
var jq=$.noConflict();
	jq(document).ready(function(){
		jq("button").click(function(){
			jq("p").text("jquery");
		});
	});
</script>
	</head>
	<body>
		<p>好的</p>
		<button>确定</button>
	</body>
</html>

如果你的 jQuery 代码块使用 $ 简写,并且您不愿意改变这个快捷方式,那么您可以把 $ 符号作为变量传递给 ready 方法。这样就可以在函数内使用 $ 符号了 - 而在函数外,依旧不得不使用 "jQuery":

<!DOCTYPE html>
<html>
	<head>
		<script src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js"></script>
		<meta charset="UTF-8">
<script>
//var jq=$.noConflict();
$.noConflict();
	jQuery(document).ready(function($){
		$("button").click(function(){
			$("p").text("jquery");
		});
	});
</script>
	</head>
	<body>
		<p>好的</p>
		<button>确定</button>
	</body>
</html>

JSONP 教程

Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。

为什么我们从不同的域(网站)访问数据需要一个特殊的技术(JSONP )呢?这是因为同源策略。

同源策略,它是由Netscape提出的一个著名的安全策略,现在所有支持JavaScript 的浏览器都会使用这个策略。

JSONP 应用

1. 服务端JSONP格式数据


callback function


回调函数


生动的描述


你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。(by常溪玲



<?php
//	Content-Type是返回消息中非常重要的内容,表示后面的文档属于什么MIME类型。
header('Content-type: application/json');
//获取回调函数名,把字符转化为html
$jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']);
//json数据
$json_data = '["customername1","customername2"]';
//输出jsonp格式的数据
echo $jsoncallback . "(" . $json_data . ")";
?>

出现了问题,我换成自己的php地址就无法显示。

<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8">
	</head>

	<body>
		<div id="div1"></div>
		<script type="text/javascript">
			function callbackFunction(r, name) {
				var html = '<ul>';
				for(var i = 0; i < r.length; i++) {
					html += '<li>' + r[i] + '</li>';
				}
				html += '</ul>';
				document.getElementById('div1').innerHTML = html;
			}
		</script>
		<script type="text/javascript" src="http://127.0.0.1:8020/jquery/jsonp.php?jsoncallback=callbackFunction"></script>
	</body>
</html>

用jquery来写

<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8">
		<script src="http://cdn.static.runoob.com/libs/jquery/1.8.3/jquery.js"></script>
	</head>

	<body>
		<div id="div1"></div>
		<script type="text/javascript">
			$.getJSON("http://www.runoob.com/try/ajax/jsonp.php?jsoncallback=?", function(data) {

				var html = '<ul>';
				for(var i = 0; i < data.length; i++) {
					html += '<li>' + data[i] + '</li>';
				}
				html += '</ul>';

				$('#div1').html(html);
			});
		</script>
	</body>

</html>

效果都如下图

jQuery 数据 星号代替 代替jquery的符号_jQuery 数据 星号代替