使用JavaScript函数中传递的变量

时间:2016-04-18 14:19:14

标签: javascript php function variables

我在所有国家/地区都有一个选择,我打电话给一个函数onChange,根据以下代码获取该国家/地区的城市列表:

<select name="country" id="country" onChange="getCity(this.value)">

我有以下代码从我的数据库中获取城市列表的代码:

<script language="javascript" type="text/javascript">
function getCity() {
    $(function(countryId) {
         var str = '<select name="city" id="city"><?php $query = "SELECT city FROM cities where country = 'countryId'";

    $result = pg_query($query);
    if (!$result) {
        echo "Problem with query " . $query . "<br/>";
        echo pg_last_error();
        exit();
    }
    printf ("<option value=Select>Select a City</option>");
    while($myrow = pg_fetch_assoc($result)) {

     printf ("<option value=$myrow[city]>$myrow[city]</option>");

}?></select>';  
        document.getElementById('citydiv').innerHTML= str;
    });
}
</script>

如何传递变量countryId?

如果我使用以下尝试使用变量countryId我的代码不起作用。

var str = '<select name="city" id="city">
<?php $query = "SELECT city FROM cities where country = 'countryId'";

但是,如果我更改值并手动引入特定值,那么它可以工作:

var str = '<select name="city" id="city">
<?php $query = "SELECT city FROM cities where country = 'Albania'";

请注意我的var str存储以下所有代码,以便将城市Div写入:

var str =&#39;

var str = '<select name="city" id="city"><?php $query = "SELECT city FROM cities where country = 'Spain'"; 
    $result = pg_query($query);
    if (!$result) {
        echo "Problem with query " . $query . "<br/>";
        echo pg_last_error();
        exit();
    }
    printf ("<option value=Select>Select a City</option>");
    while($myrow = pg_fetch_assoc($result)) {

     printf ("<option value=$myrow[city]>$myrow[city]</option>");

}?></select>';  

更新

根据答案,我希望完成像

这样的事情
<script language="javascript" type="text/javascript">
function Nadaquever(countryId) {
    $(function() {
         var str = '<select name="city" id="city"><?php $query = "SELECT city FROM cities where country = ' + countryID + '"';          
         str += '$result = pg_query($query);';
         str += 'if (!$result) {';
         str += 'echo "Problem with query " . $query . "<br/>";';
         str += 'echo pg_last_error();';
         str += 'exit();';
         str += '}';
         str += 'printf ("<option value=Select>Select a City</option>");';
         str += 'while($myrow = pg_fetch_assoc($result)) {';
         str += 'printf ("<option value=$myrow[city]>$myrow[city]</option>");';
         str += '}?></select>';

document.getElementById('citydiv').innerHTML= str;
    });
}
</script>

但它不起作用

非常感谢

3 个答案:

答案 0 :(得分:0)

要在Javascript中添加变量,您必须使用+符号,请参阅下面的代码。

var str = 'blah blah blah';
str += ' blah';
str += ' ' + 'and some more blah';

你也需要像这样传递国家ID

function getCity(countryId) {

答案 1 :(得分:0)

您需要了解javascript string c oncatenation

它必须像下面的代码一样改变。

[正确代码]

var countryId = "myId";
var str = '<select name="city" id="city"><?php $query = "SELECT city FROM cities where country = ' + countryId + '"';

答案 2 :(得分:0)

我不知道这将如何将您的SQL查询发送到您的数据库。如果你只是将Javascript字符串连接在一起,那么你最终会得到一个 - 一个包含一些永远不会看到服务器的PHP标记的字符串(尝试将str var记录到控制台并查看你拥有的内容)。

您需要考虑应用程序的流程。根据您在getCity()框中的选项更改时尝试触发Javascript函数select的方式,我假设您不想重新加载页面,因此您需要发送通过AJAX对数据库进行SQL查询。

假设您的标记看起来像这样:

<div id="citydiv">
  <select id="country" name="countryID">
    <option value="Select">Select a Country</option>
    <option value="Albania">Albania</option>
  </select>
  <select id="city" name="city">
    <option value="Select">Select a City</option>
  </select>
</div> 

您可以使用jQuery生成城市字段的选项,如下所示:

$(function(){
  $('#country').on('change',function(){
    $.ajax({
      url: '/getCities.php',
      method: "POST",
      data: {countryID: $('#country').val() }
    })
    .done(function(data){
      $('#city').html(data);
    });
  });
});

这会将所有onchange个事件发送到getCities.php文件,您可以从$_POST['countryID']检索 countryID ,然后将其插入到您的SQL查询中,然后检索结果集然后打印出选择字段的选项。然后,jQuery会将select字段的选项设置为PHP脚本的结果。

此外,在查询数据库以提高安全性时,值得考虑使用Postgres prepared statements