Làm cách nào để tôi chỉ cần lấy GET
và POST
các giá trị với JQuery?
Những gì tôi muốn làm là một cái gì đó như thế này:
$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));
Làm cách nào để tôi chỉ cần lấy GET
và POST
các giá trị với JQuery?
Những gì tôi muốn làm là một cái gì đó như thế này:
$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));
Câu trả lời:
Đối với các tham số GET, bạn có thể lấy chúng từ 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"]);
Đối với tham số POST, bạn có thể tuần tự hóa $_POST
đối tượng ở định dạng JSON thành một <script>
thẻ:
<script type="text/javascript">
var $_POST = <?php echo json_encode($_POST); ?>;
document.write($_POST["test"]);
</script>
Trong khi bạn đang ở đó (làm mọi việc ở phía máy chủ), bạn cũng có thể thu thập các tham số GET trên PHP:
var $_GET = <?php echo json_encode($_GET); ?>;
Lưu ý: Bạn sẽ cần phiên bản PHP 5 trở lên để sử dụng json_encode
chức năng tích hợp sẵn.
Cập nhật: Đây là cách triển khai chung chung hơn:
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);
Có một plugin cho jQuery để nhận các tham số GET được gọi là .getUrlParams
Đối với POST, giải pháp duy nhất là lặp lại POST thành một biến javascript bằng PHP, như Moran đã đề xuất.
tại sao không sử dụng PHP cũ tốt? ví dụ: giả sử chúng tôi nhận được tham số GET 'target':
function getTarget() {
var targetParam = "<?php echo $_GET['target']; ?>";
//alert(targetParam);
}
Hoặc bạn có thể sử dụng cái này http://plugins.jquery.com/project/parseQuery , nó nhỏ hơn hầu hết (449 byte được rút gọn), trả về một đối tượng đại diện cho các cặp tên-giá trị.
Với bất kỳ ngôn ngữ phía máy chủ nào, bạn sẽ phải phát các biến POST thành javascript.
.MẠNG LƯỚI
var my_post_variable = '<%= Request("post_variable") %>';
Chỉ cần cẩn thận với các giá trị trống. Nếu biến bạn cố gắng phát ra thực sự trống, bạn sẽ gặp lỗi cú pháp javascript. Nếu bạn biết đó là một chuỗi, bạn nên đặt nó trong dấu ngoặc kép. Nếu đó là một số nguyên, bạn có thể muốn kiểm tra xem nó có thực sự tồn tại hay không trước khi viết dòng vào javascript.
Bạn có thể thử plugin Query String Object cho jQuery.
Đây là thứ để thu thập tất cả các GET
biến trong một đối tượng toàn cục, một quy trình được tối ưu hóa trong vài năm. Kể từ sự nổi lên của jQuery, bây giờ có vẻ thích hợp để lưu trữ chúng trong chính jQuery, tôi đang kiểm tra với John về một triển khai cốt lõi tiềm năng.
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('&'))
});
Ví dụ sử dụng:
switch ($.Q.event) {
case 'new' :
// http://www.site.com/?event=new
$('#NewItemButton').trigger('click');
break;
default :
}
Hi vọng điêu nay co ich. ;)
Các plugin jQuery có vẻ đẹp nhưng những gì tôi cần là một hàm js nhanh để phân tích cú pháp các tham số get. Đây là những gì tôi đã tìm thấy.
Nếu $ _GET của bạn đa chiều, đây có thể là thứ bạn muốn:
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]);
}
});
đơn giản, nhưng hữu ích để nhận vars / giá trị từ 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;
}
Tôi đã tìm thấy nó ở đâu đó trên internet, chỉ sửa một số lỗi
Sử dụng chức năng sau:
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;
};
và truy cập các biến như vars['index']
nơi 'index'
là tên của biến get.
http://foo.com/?a=b#bar
. Nó nghĩ b#bar
là giá trị cho a
.
Chỉ để ghi lại, tôi muốn biết câu trả lời cho câu hỏi này, vì vậy tôi đã sử dụng một phương thức PHP:
<script>
var jGets = new Array ();
<?
if(isset($_GET)) {
foreach($_GET as $key => $val)
echo "jGets[\"$key\"]=\"$val\";\n";
}
?>
</script>
Bằng cách đó, tất cả javascript / jquery của tôi chạy sau nó có thể truy cập mọi thứ trong jGets. Đó là một giải pháp thanh lịch tốt đẹp tôi cảm thấy.
Cách tiếp cận của tôi:
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]);
})();