Javascript 无法通过传递URL获取变量
我存储了一个变量Javascript 无法通过传递URL获取变量,javascript,variables,url,onload-event,Javascript,Variables,Url,Onload Event,我存储了一个变量username,我希望通过链接将其传递到下一页。因此,我: <a href="register-form.php?username=username">Go!</a> 但是,对于用户名,我得到一个未定义变量错误 在我看来,URL没有正确地传递变量。我应该在地址行中看到我的实际变量吗?我应该看到username=myusernameithis吗? 本质上,我要做的就是将变量username从第1页传递到第2页。仅此而已。我认为您试图将查询字符串变量转换为
username
,我希望通过链接将其传递到下一页。因此,我:
<a href="register-form.php?username=username">Go!</a>
但是,对于用户名
,我得到一个未定义变量
错误
在我看来,URL没有正确地传递变量。我应该在地址行中看到我的实际变量吗?我应该看到username=myusernameithis吗?
本质上,我要做的就是将变量
username
从第1页传递到第2页。仅此而已。我认为您试图将查询字符串变量转换为javascript,而不是php。尝试以下方法:
url查询字符串中传递的参数不会神奇地加载到javascript全局范围中 正如@Archios所说,您可以使用javascript解析查询字符串,如下所示:
var username = getUrlVars()["username"];
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,
function(m,key,value) {
vars[key] = value;
});
return vars;
}
<a href="register-form.php?username=<?php echo $username; ?>">Go!</a>
但就我个人而言,我更喜欢:
function inputUsername(){
var username= "<?php echo isset($_GET[username])?$_GET[username]:''; ?>";
console.log("I'm running" + username);
document.getElementById('inputUsername').value = username;
}
添加行
$('.userNameButton a').attr('href','register-form.php?username='+username);
由于未在任何位置设置js变量“username”,因此出现未定义变量错误。在URL中设置此选项与定义变量不同 如果您正确设置了URL,您应该看到类似“register form.php?username=Francesca”的内容 您可以通过混合使用PHP和javascript来实现这一点 在register-form.php中:
if(isset($_GET["username"])) {
$username = $_GET["username"];
} else {
$username = "not set";
}
register-form.php:
if(isset($_GET["username"])) {
$username = $_GET["username"];
} else {
$username = "not set";
}
在js中(这比调用
更好):
window.onload=function(){
变量用户名=
log(“我正在运行”+用户名);
document.getElementById('inputUsername')。值=用户名;
};
更好的做法是根本不使用js,而是在PHP中完成这一切:
<?php
if(isset($_GET["username"])) {
$username = $_GET["username"];
} else {
$username = "not set";
}
?>
<input name="username" id="username" type="text" value="<?php echo $username ?>">
给你。我对代码进行了注释,希望它更有意义。基本上,我们从地址栏中获取url,然后逐个解析这些片段以获得我们想要的内容
window.ParseQueryString = function () {
//Get the current location in the address bar
var url = window.location.href,
parameterSet = [],
//Get everything to the right of the '?'
parameterString = url.split('?')[1];
//Do we have anything to work with?
if (parameterString) {
//Lets get all individual parameter in the parameter string
var parameterParts = parameterString.split('&');
for (var i = 0, e; e = parameterParts[i++];) {
//Get the parameter key and the value
var parameter = e.split('=');
//Push it into the array
parameterSet.push({
'key': parameter[0],
'value': parameter[1]
});
}
}
//Give me my prettyfied query string array plz!
return parameterSet;
}
console.log(ParseQueryString());
在窗口位置为的情况下使用此代码将产生:
[{key:'s',value:'search'},{key:'f',value:'images'}]
这样,在您的onload
回调中,您可以调用ParseQueryString
并查看它以找到用户名
值并将其填充到文本框中
编辑
我添加了一个函数,它不返回键/值对数组,而是返回一个带有查询字符串键的对象作为对象上的字段
window.ParseQueryString = function () {
//Get the current location in the address bar
var url = window.location.href,
parameterSet = {},
//Get everything to the right of the '?'
parameterString = url.split('?')[1];
//Do we have anything to work with?
if (parameterString) {
//Lets get all individual parameter in the parameter string
var parameterParts = parameterString.split('&');
for (var i = 0, e; e = parameterParts[i++];) {
//Get the parameter key and the value
var parameter = e.split('=');
//Add a new field to the object
parameterSet[parameter[0]] = parameter[1];
}
}
//Give me my prettyfied query string array plz!
return parameterSet;
}
下面是一个演示您的特定用例的示例请注意,fiddler正在向url追加一个查询字符串,否则fiddler将不允许这样做。这发生在第3行您应该有一些类似于var username=
的代码让我们看看您是否有与此相关的html和/或php代码?仅仅因为你有一个url参数并不能让页面知道它。从javascript中,您必须解析url才能获取它。@Justin或使用服务器端语言,如asp或PHP。@Justin页面register-form.PHP存在,您可以看到它-页面加载正常,它只是不理解username
如果register-form.php使用的是POST方法,那么您描述的url变量将无法工作,因为它是GET方法。您必须创建一个包含用户名的POST请求,并将其传递到register-form.php。请注意,$username
可能未定义,这将导致var username=
产生错误。您好,username变量已设置。它是在URL之前设置的,并且已经存储了一个值。@Francesca用户名变量尚未设置,与javascript无关。php可以轻松读取查询字符串,或者可以在javascriptI中解析查询字符串。我以为这就是变量的设置<代码>用户名=wordOne+wordTwo+wordThree
-变量也在控制台中正确输出,我有console.log(“Username=“+Username”)代码>-我在这里错了吗?如果变量包含一个值,那么它就不会被设置?如果我使用的是你的PHP版本,那么当页面加载时它是如何运行的?是什么触发了此代码的运行?对于代码的第二部分/您首选的方法。这个去哪儿了?在什么函数中?@Francesca我编辑了答案以使其更清晰,我将其添加到页面中,但我得到了一个错误,在页面加载中可以看到它,在我看来,它不喜欢您在PHP中调用var=username的行。我在开始时遗漏了“
”,而”代码>最后,很抱歉,我编辑了above@Francesca它应该超出它的范围,因为此代码正在添加到全局范围。然后在OnLoad
事件中,执行var queryString=ParseQueryString()代码>。这将返回数组,其中包含可以循环使用的查询字符串的部分。@Francesca也许小提琴手会帮助理解代码。
window.onload=function(){
var username = <?php echo $username ?>
console.log("I'm running" + username);
document.getElementById('inputUsername').value = username;
};
<?php
if(isset($_GET["username"])) {
$username = $_GET["username"];
} else {
$username = "not set";
}
?>
<input name="username" id="username" type="text" value="<?php echo $username ?>">
window.ParseQueryString = function () {
//Get the current location in the address bar
var url = window.location.href,
parameterSet = [],
//Get everything to the right of the '?'
parameterString = url.split('?')[1];
//Do we have anything to work with?
if (parameterString) {
//Lets get all individual parameter in the parameter string
var parameterParts = parameterString.split('&');
for (var i = 0, e; e = parameterParts[i++];) {
//Get the parameter key and the value
var parameter = e.split('=');
//Push it into the array
parameterSet.push({
'key': parameter[0],
'value': parameter[1]
});
}
}
//Give me my prettyfied query string array plz!
return parameterSet;
}
console.log(ParseQueryString());
window.ParseQueryString = function () {
//Get the current location in the address bar
var url = window.location.href,
parameterSet = {},
//Get everything to the right of the '?'
parameterString = url.split('?')[1];
//Do we have anything to work with?
if (parameterString) {
//Lets get all individual parameter in the parameter string
var parameterParts = parameterString.split('&');
for (var i = 0, e; e = parameterParts[i++];) {
//Get the parameter key and the value
var parameter = e.split('=');
//Add a new field to the object
parameterSet[parameter[0]] = parameter[1];
}
}
//Give me my prettyfied query string array plz!
return parameterSet;
}