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;
}