如何使用jQuery简单地获取GET
和POST
的值?
我想做的事情类似于这样:
$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));
如何使用jQuery简单地获取GET
和POST
的值?
我想做的事情类似于这样:
$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));
对于GET参数,您可以从document.location.search
中获取它们:
var $_GET = {};
document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
function decode(s) {
return decodeURIComponent(s.split("+").join(" "));
}
$_GET[decode(arguments[1])] = decode(arguments[2]);
});
document.write($_GET["test"]);
对于POST参数,你可以将$_POST
对象以JSON格式序列化到<script>
标签中:
<script type="text/javascript">
var $_POST = <?php echo json_encode($_POST); ?>;
document.write($_POST["test"]);
</script>
在进行服务器端处理时,你可以收集PHP中的GET参数:
var $_GET = <?php echo json_encode($_GET); ?>;
注意:你需要使用PHP版本5或更高版本才能使用内置的json_encode
函数。
更新:这里是一个更通用的实现:
function getQueryParams(qs) {
qs = qs.split("+").join(" ");
var params = {},
tokens,
re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(qs)) {
params[decodeURIComponent(tokens[1])]
= decodeURIComponent(tokens[2]);
}
return params;
}
var $_GET = getQueryParams(document.location.search);
有一个jQuery插件可以获取GET参数,它叫做.getUrlParams
对于POST请求的唯一解决方案是使用PHP将POST回显到javascript变量中,就像Moran建议的那样。
function getTarget() {
var targetParam = "<?php echo $_GET['target']; ?>";
//alert(targetParam);
}
保持简单
用变量的键替换VARIABLE_KEY以获取其值
var get_value = window.location.href.match(/(?<=VARIABLE_KEY=)(.*?)[^&]+/)[0];
或者你可以使用这个 http://plugins.jquery.com/project/parseQuery,它比大多数插件都要小(压缩后只有449字节),返回一个表示名称-值对的对象。
var my_post_variable = '<%= Request("post_variable") %>';
要小心空值。如果您尝试发出的变量实际上为空,则会收到javascript语法错误。如果您知道它是字符串,则应将其用引号括起来。如果它是整数,您可能希望在将该行写入javascript之前测试是否存在。
这是一个优化了数年的例程,可以将所有GET
变量收集到一个全局对象中。自从jQuery兴起以来,现在似乎适合将它们存储在jQuery本身中,我正在与John商讨可能的核心实现。
jQuery.extend({
'Q' : window.location.search.length <= 1 ? {}
: function(a){
var i = a.length,
r = /%25/g, // Ensure '%' is properly represented
h = {}; // (Safari auto-encodes '%', Firefox 1.5 does not)
while(i--) {
var p = a[i].split('=');
h[ p[0] ] = r.test( p[1] ) ? decodeURIComponent( p[1] ) : p[1];
}
return h;
}(window.location.search.substr(1).split('&'))
});
示例用法:
switch ($.Q.event) {
case 'new' :
// http://www.site.com/?event=new
$('#NewItemButton').trigger('click');
break;
default :
}
jQuery插件看起来不错,但我需要的是一个快速的js函数来解析get参数。这就是我找到的。
var $_GET = {};
document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
function decode(s) {
return decodeURIComponent(s.split("+").join(" "));
}
//handling for multidimensional arrays
if(decode(arguments[1]).indexOf("[]") > 0){
var newName = decode(arguments[1]).substring(0, decode(arguments[1]).length - 2);
if(typeof $_GET[newName] == 'undefined'){
$_GET[newName] = new Array();
}
$_GET[newName].push(decode(arguments[2]));
}else{
$_GET[decode(arguments[1])] = decode(arguments[2]);
}
});
$_GET
。而且OP在2009年接受了这个作为正确答案,所以我认为可以安全地假设OP的问题与PHP有关。 - Ates Goral