我遇到调用我的javascript函数的问题,该函数循环遍历一个数组,为每个值调用一个外部PHP页面。我在Chrome的开发者控制台中收到以下错误:
Uncaught SyntaxError:意外的令牌。 CSV.php?reg = 1:3
当检查传递给脚本的值时,一切都应该是:
<script type="text/javascript">
function.csvgen(){
var area = "["22","23","24"]";
var start =""2017-01-30"";
var end = ""2017-02-06"";
var len = area.length;
for (i = 0; i < len; i++) {
$.getScript("CSVGEN.php?area="+area[i]+"&start="+start+"&end="+end);
}
}
</script>
我不是一个优秀的程序员,并且使用了很少的Javascript(这也需要来自这个精彩论坛的帮助......)。这是我的页面代码。代码的要点是让用户根据区域以及开始日期和结束日期选择多个区域,然后从MS SQL数据库中为每个区域生成一个CSV,其代码在被调用中CSVGEN.PHP文件。我已经使用手动生成的链接测试了CSVGen文件并且它可以工作,如果我将静态链接放在for循环中,则不会。
<script type="text/javascript">
function.csvgen(){
var area = "<?php echo json_encode(array_values($_POST['arealist'])); ?>";
var start ="<?php echo json_encode($_POST['start']); ?>";
var end = "<?php echo json_encode($_POST['end']); ?>";
var len = area.length;
for (i = 0; i < len; i++) {
$.getScript("CSVGEN.php?area="+area[i]+"&start="+start+"&end="+end);
}
}
</script>
<?php
$page_title="CSV Generator";
include("\Include\header.inc");
include("\Include\connect-db.php");
include("\Include\CSVGen.php");
$error="";
$start_date=date("Y-m-d");
$end_date=date("Y-m-d", strtotime("+7 days"));
if(isset($_GET['reg']))
{
$reg=$_GET['reg'];
}
else{
$reg='1';
}
if($start_date>$end_date){
$error = 'ERROR: End Date cannot be before Start Date!';
}
if ($error != '')
{
echo '<div class="container">
<div class="row">
<div class="alert alert-danger col-md-12">'.$error.'
</div>
</div>
</div>';
}
$sqlareas="SELECT Area_Name, Region_ID, Area_ID FROM Listings_Areas WHERE region = '$reg'";
$arearesult= sqlsrv_query($conn, $sqlareas, array(), array("Scrollable"=>"buffered"));
$areacount = sqlsrv_num_rows($arearesult);
function renderForm($arearesult, $areacount, $start_date, $end_date){
?>
<html>
<head>
</head>
<body>
<div class="container">
<div class="row">
<form id="CSV" name="form1" method="post">
<div class="col-md-2 col-md-offset-1">
<p><select name="arealist[]" size="<?php echo $areacount ;?>" multiple="multiple" tabindex="1">
<?php
while($areas=sqlsrv_fetch_array($arearesult)){
echo'<option value="' . $areas['Area_ID'] . '">' . $areas['Area_Name'] . '</option>';
}
?>
</select>
</div>
<div class="col-md-3">
<strong>Start Date: </strong> <input type="date" name="start" value="<?php echo $start_date; ?>" />
</div>
<div class="col-md-3">
<strong> End Date: </strong> <input type="date" name="end" value="<?php echo $end_date; ?>" />
</div>
<div class="col-md-2">
<input type="submit" onclick="csvgen()" name="submit" value="Get CSVs">
</div>
</form>
</div>
</div>
<?php
}
if($_SERVER['REQUEST_METHOD'] === 'POST'){
print_r(array_values($_POST['arealist']));
echo $_POST['start'];
echo $_POST['end'];
}
else{
renderForm($arearesult, $areacount, $start_date, $end_date);
}
?>
我已经尝试删除所有标签/间距并清除任何可能偷偷摸摸的潜在非法字符,但它显示了一段时间,我只能猜测是指我的area.length哪个据我所知,从手册中看是正确的,如果我删除它或$ .getscript我仍然会收到错误,但是我已经在其他类似功能中使用了它,没有任何问题,所以我不知道为什么这将是错误的,或如何替换它。
答案 0 :(得分:0)
在剧本开始时你有:
<script type="text/javascript">
function.csvgen(){
//...
应该是:
<script type="text/javascript">
function csvgen(){
//...
在.
和function
之间使用空格csvgen
。
注意:此area = "["22","23","24"]";
也是错误的。使用不同的引号(如area = '["22","23","24"]';
)或转义内部引号(如area = "[\"22\",\"23\",\"24\"]";
)
找一个好的javascript 教程,详细了解如何在javascript中声明函数。