Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将动态变量传递给外部函数_Javascript_Jquery - Fatal编程技术网

Javascript 将动态变量传递给外部函数

Javascript 将动态变量传递给外部函数,javascript,jquery,Javascript,Jquery,我在这里被一些javascript卡住了。我需要将动态变量传递给外部函数。以下是生成PHP网页URL的函数,我最终尝试将一些数据发布到完整函数之外,仅发布重要部分: var id = ""; var name = ""; var url = ""; function initialize () { downloadUrl("phpsqlajax_genxml1.php", function (data) { var xml = data.responseXML; var

我在这里被一些javascript卡住了。我需要将动态变量传递给外部函数。以下是生成PHP网页URL的函数,我最终尝试将一些数据发布到完整函数之外,仅发布重要部分:

var id = "";
var name = "";
var url = "";


function initialize () {
  downloadUrl("phpsqlajax_genxml1.php", function (data) {
    var xml = data.responseXML;
    var markers = xml.documentElement.getElementsByTagName("marker");
    for (var i = 0; i < markers.length; i++) {
        var id = markers[i].getAttribute("id");
        var name = markers[i].getAttribute("name");
        var description1 = markers[i].getAttribute("description");
        var type = markers[i].getAttribute("type");
        var point = new google.maps.LatLng(
                parseFloat(markers[i].getAttribute("lat")),
                parseFloat(markers[i].getAttribute("lng")));
        var url = "markerpages.php?name=" + name + "&id=" + id;
        var html = "<b>" + name + "</b> <br/>" + description1;
        var contentString = '<div id="content">' +
                '<div id="siteNotice">' +
                '</div>' +
                '<h1 id="firstHeading" class="firstHeading">' + name + '</h1>' +
                '<div id="bodyContent">' +
                '<p>' + description1 + '</p>' + 
                '<p><a href="'+ url +'" onclick="postData(url)">Link to PHP web page</a>' +
                '</p>' +
                '</div>' +
                '</div>';`
jquery正在触发onclick,但url返回为未定义,所以我只需要引入url变量,该变量是基于存储在数据库中的标记名生成的。我是初学者,所以这可能很简单。我查看了论坛和文档,但已经有好几个小时没弄清楚了,哈哈


衷心感谢您的帮助

在所有函数的作用域之外声明变量,如下所示:

 //Declare the three variables globally
 var url = "";
 var name = "";
 var id = "";
 ...

 function initialize () {

   ...
   //id and name are local to this function, if you want them to be global as well
   //declare them outside the scope of all functions along with url variable

   //Assign them suitable values
   id = markers[i].getAttribute("id");
   name = markers[i].getAttribute("name");
   url = "markerpages.php?name=" + name + "&id=" + id;

  ...
 }

function postData(arg) {

   //Use all the variables here directly for example you could just try alerting them
   alert("Url: "+url+"Name: "+name+"ID: "+id);

 }
您案例中的问题是url变量不是全局变量。在postDataarg中声明url变量并分别初始化函数,因此该变量在这些函数的作用域中是局部的

此外,在postDataarg函数中,您可以执行以下操作:

  var id = markers[i].getAttribute("id");
  var name = markers[i].getAttribute("name");
  var url = "markerpages.php?name=" + name + "&id=" + id;

但是,标记数组是在initialize函数中遍历的,而不是在postData函数中遍历的。如果您想在此上下文中访问'id'和'name'变量。只需在所有函数的作用域之外声明一次,然后在任何上下文中初始化或更新它们,就像我用“url”变量显示的那样。

全局定义是什么意思?我只看到一个var url,它在document.ready闭包中,加上作为参数传递的url。这两个变量至少是相互冲突的,所以我刚才试着把这三个变量都带进来,实际上以前也试过,但当我把这些变量带进来时,我发现我没有定义。那么我需要引入整个变量数组吗?如果我只将url变量引入函数,那么我得id未定义或名称未定义defined@ambe5950,不能将所有三个变量都带到postData函数中,因为i和markers数组未在该函数的作用域中定义。您已经在读取标记数组的initialize函数中为“name”和“id”分配了一个合适的值。但是,如果您还想在“postData”函数中使用“name”和“id”变量。只需在所有函数之外声明它们,并像您一样为它们赋值。请参阅编辑后的答案。明白了,并更新了我的代码,但如果这些[i]值不是指定合适的值,而是由数据库查询填写,该怎么办?我有很多标记,但需要在initialize函数中生成每个标记的名称和url,并将数据发布到服务器。您发布的代码和变量名将只存储标记数组的最后一个值,因为它们被定义为字符串。您的问题是理解为什么在postData函数中未定义url变量。这是因为您将其定义为该函数的某个范围的局部。但是,如果要为每个i存储'name'和相应的'url'的值,则名称,id和url变量将是数组,而不是字符串。很抱歉一直在这方面困扰您,感谢您迄今为止的所有帮助,当我单击其中一个标记链接时,其关联的url看起来像,但我需要有特定的url才能知道发往何处。现在,url、id和名称仍然为空。
  var id = markers[i].getAttribute("id");
  var name = markers[i].getAttribute("name");
  var url = "markerpages.php?name=" + name + "&id=" + id;