在 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 个参数或
参数 ;)
我正在尝试将几个变量从 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 个参数或
参数 ;)