在 Javascript 中传递参数时出现问题

Problems passing parmaters in Javascript

我正在尝试将几个变量从 php 页面传递到 java 脚本中。但是只有第一个参数被传递。

php页面调用脚本如下:

<?
$sdate = 0;
$edate = 2;
?>
<script type="text/javascript">
            window.onload = function() { 
                datagrid = new DatabaseGrid('<? echo $sdate; ?>', '<? echo $edate; ?>');
            }; 
</script><BR>

正在调用的 Java 脚本是:

function DatabaseGrid(sdate, edate) 
{ 
    this.editableGrid = new EditableGrid("demo", {
        enableSort: true,
        tableLoaded: function() { datagrid.initializeGrid(this); },
        modelChanged: function(rowIndex, columnIndex, oldValue, newValue, row) {
            updateCellValue(this, rowIndex, columnIndex, oldValue, newValue, row);
        }
    });
    this.fetchGrid(sdate);
    this.fetchGrid(edate); 

}

DatabaseGrid.prototype.fetchGrid = function(sdate, edate)  {
    // call a PHP script to get the data
    alert("loaddata_dailyotp.php?o=" + sdate + "&e=" + edate + "");
    this.editableGrid.loadXML("loaddata_dailyotp.php?o=" + sdate + "&e=" + edate + "");
};

DatabaseGrid.prototype.initializeGrid = function(grid) {
    grid.renderGrid("tablecontent", "testgrid");
};  

我添加了警报 window 以准确显示所请求的内容。我期待这个:

loaddata_dailyotp.php?o=0&e=2

但是我得到的是:

loaddata_dailyotp.php?o=0&e=undefined

为什么我的第二个参数没有通过?

您没有将 "edate" 参数传递给您的 fetchGrid() 调用。这就是它显示为 "undefined" 的原因。由于某种原因,您调用了 fetchGrid() 两次。

这样调用fetchGrid

function DatabaseGrid(sdate, edate) 
{ 
    this.editableGrid = new EditableGrid("demo", {
        enableSort: true,
        tableLoaded: function() { datagrid.initializeGrid(this); },
        modelChanged: function(rowIndex, columnIndex, oldValue, newValue, row) {
            updateCellValue(this, rowIndex, columnIndex, oldValue, newValue, row);
         } 
    });
    this.fetchGrid(sdate, edate);
}

你错过了传递第二个参数。

您可以通过以下方式进行:

<script type="application/json">
var payload = <?= json_encode(array('sdate' => $sDate, 'edate' => $eDate)); ?>
</script>

然后调用您的脚本:

<script type="text/javascript">
window.onload = function() { 
   datagrid = new DatabaseGrid(payload.sdate, payload.edate);
}; 
</script>

我是 Sharepoint 开发者。我在我的一个应用程序中遇到了同样的问题,我传递了两个值并且只有第一个值到达了另一端。甚至警告框也显示两个值。

问题只是最后的值没有到达另一端,所以疯狂的解决方案是传递 3 个参数,第 3 个是测试参数,所以我的两个参数到达了另一端,而第 3 个无论如何没用的参数被自动忽略了。

您的建议:

  1. 请检查三个参数是否仍然只得到 1 个参数或

  2. 参数 ;)