【发布时间】:2009-01-13 15:49:28
【问题描述】:
如何使用 JQuery 简单地获取 GET 和 POST 值?
我想做的是这样的:
$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));
【问题讨论】:
标签: javascript jquery
如何使用 JQuery 简单地获取 GET 和 POST 值?
我想做的是这样的:
$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));
【问题讨论】:
标签: javascript jquery
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参数,可以将JSON格式的$_POST对象序列化成<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 建议的那样。
【讨论】:
为什么不使用好的旧 PHP?例如,假设我们收到一个 GET 参数“目标”:
function getTarget() {
var targetParam = "<?php echo $_GET['target']; ?>";
//alert(targetParam);
}
【讨论】:
或者你可以使用这个http://plugins.jquery.com/project/parseQuery,它比大多数都小(最小化 449 字节),返回一个表示名称-值对的对象。
【讨论】:
对于任何服务器端语言,您都必须将 POST 变量发送到 javascript。
.NET
var my_post_variable = '<%= Request("post_variable") %>';
请注意空值。如果您尝试发出的变量实际上是空的,您将收到一个 javascript 语法错误。如果你知道它是一个字符串,你应该把它用引号引起来。如果它是一个整数,您可能需要在将行写入 javascript 之前测试它是否确实存在。
【讨论】:
你可以试试Query String Object jQuery插件。
【讨论】:
这里有一些东西可以将所有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 :
}
希望这会有所帮助。 ;)
【讨论】:
保持简单
将VARIABLE_KEY替换为变量的键,得到它的值
var get_value = window.location.href.match(/(?<=VARIABLE_KEY=)(.*?)[^&]+/)[0];
【讨论】:
jQuery 插件看起来不错,但我需要的是一个快速的 js 函数来解析 get 参数。 这是我发现的。
【讨论】:
如果您的 $_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]);
}
});
【讨论】:
简单,但对于从 URL 获取变量/值很有用:
function getUrlVars() {
var vars = [], hash, hashes = null;
if (window.location.href.indexOf("?") && window.location.href.indexOf("&")) {
hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
} else if (window.location.href.indexOf("?")) {
hashes = window.location.href.slice(window.location.href.indexOf('?') + 1);
}
if (hashes != null) {
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
vars[hash[0]] = hash[1];
}
}
return vars;
}
我在网上找到的,只是修复了一些错误
【讨论】:
使用以下函数:
var splitUrl = function() {
var vars = [], hash;
var url = document.URL.split('?')[0];
var p = document.URL.split('?')[1];
if(p != undefined){
p = p.split('&');
for(var i = 0; i < p.length; i++){
hash = p[i].split('=');
vars.push(hash[1]);
vars[hash[0]] = hash[1];
}
}
vars['url'] = url;
return vars;
};
并以vars['index'] 访问变量,其中'index' 是get 变量的名称。
【讨论】:
http://foo.com/?a=b#bar 等 UTL 失败。它认为b#bar 是a 的值。
我的做法:
var urlParams;
(window.onpopstate = function () {
var match,
pl = /\+/g, Regex for replacing addition symbol with a space
search = /([^&=]+)=?([^&]*)/g,
decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
query = window.location.search.substring(1);
urlParams = {};
while (match = search.exec(query))
urlParams[decode(match[1])] = decode(match[2]);
})();
【讨论】:
为了记录,我想知道这个问题的答案,所以我用了一个PHP的方法:
<script>
var jGets = new Array ();
<?
if(isset($_GET)) {
foreach($_GET as $key => $val)
echo "jGets[\"$key\"]=\"$val\";\n";
}
?>
</script>
这样,在此之后运行的所有 javascript/jquery 都可以访问 jGets 中的所有内容。我觉得这是一个不错的优雅解决方案。
【讨论】: