как получить переменные GET и POST с помощью JQuery?
как я могу просто получить GET
и POST
значения с JQuery?
то, что я хочу сделать, это что-то вроде этого:
$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));
14 ответов:
для получения параметров, вы можете захватить их с
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>
в то время как вы на нем (делать вещи на стороне сервера), вы можете собрать GET параметры на PHP, а также:
var $_GET = <?php echo json_encode($_GET); ?>;
Примечание: вам понадобится PHP версии 5 или выше, чтобы использовать встроенный
есть плагин для jQuery, чтобы получить GET params называется .getUrlParams
для POST единственным решением является повторение сообщения в переменную javascript с помощью PHP, как предложил Моран.
почему бы не использовать старый добрый PHP? например, предположим, что мы получаем параметр GET 'target':
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.
вы можете попробовать Объект Строки Запроса плагин для jQuery.
вот что-то, чтобы собрать все
GET
переменные в глобальном объекте, процедура оптимизирована в течение нескольких лет. С момента появления jQuery теперь кажется целесообразным хранить их в самом jQuery, я проверяю с Джоном потенциальную реализацию ядра.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 параметры. Вот что я нашел.
Если ваш $_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]); } });
просто, но все же полезно получить vars / values из 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.
просто для записи, я хотел знать ответ на этот вопрос, поэтому я использовал метод PHP:
<script> var jGets = new Array (); <? if(isset($_GET)) { foreach($_GET as $key => $val) echo "jGets[\"$key\"]=\"$val\";\n"; } ?> </script>
таким образом, все мои javascript/jquery, которые запускаются после этого, могут получить доступ ко всему в jGets. Его хорошее элегантное решение, я чувствую.
мой подход:
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]); })();