2015-09-07 99 views
2

我尝试从JavaScript(当在表单中选择某个选项时)将一个变量传递给调用SQL查询的PHP文件。将PHP变量传递给Javascript函数可以提供一个AJAX请求吗?

应将SQL查询(字符串)切换到Javascript函数并执行该函数。一切都在一个点击。这是否有可能?

我试过用AJAX请求,但是当我使用这个对我的最后一步:

var javascriptstring; 
     $.getJSON('getstring.php', function(data) { 
     javascriptstring = data.value; 
     }); 

I get the exception: Uncaught TypeError: Cannot set property 'innerHTML' of null

而且它打印出 “不确定”

.HTML

<!DOCTYPE html> 
<html> 

<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
<script type='text/javascript'> 
    function showString(time) { 
    if (time=="") { 
    document.getElementById("txtHint").innerHTML=""; 
    return; 
    } 
    if (window.XMLHttpRequest) { 
    // code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } else { // code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
    } 
    } 
    xmlhttp.open("GET","getstring.php?q="+time,true); 
    xmlhttp.send(); 

     var javascriptstring; 
     $.getJSON('getstring.php', function(data) { 
     javascriptstring = data.value; 
     }); 
     document.write(javascriptstring); 
} 
</script> 
</head> 
<body> 

    <form> 
    <select name="somestring" onchange="showString(this.value)"> 
    <option value="">No string selected</option> 
    <option value="1">String 1</option> 
    </select> 
    </form> 
    <br> 
    <div id="txtHint"><b>String will be listed here...</b></div> 

</body> 
</html> 

PHP

<?php 
$q = intval($_GET['q']); 

$con = pg_connect("host=localhost port=5432 dbname=Twitter user=postgres password=****"); 
if (!$con) { 
    die('Could not connect: ' . pg_errormessage($con)); 
} 

$sql="SELECT * FROM tswholeworld WHERE createdat > (NOW() - INTERVAL '".$q."hour');"; 
$result = pg_query($con,$sql); 

    $string = ""; 
while($row = pg_fetch_assoc($result)){ 
    $lat = $row['latitude']; 
    $lon = $row['longitude']; 
    $string .= "new google.maps.LatLng({$lat}, {$lon}), "; 
} 
echo '{"value": "'.$string.'"}'; 
pg_close($con); 
?> 

回答

0

里面我想AJAX的这么多的量应该足够了。其实document.write用当前替换整个DOM。我已经删除并修改了你的功能。此外,我已经删除了原生的Ajax代码,因为你已经有了jQuery,所以没有必要添加大代码。这个小功能将得到JSON数据和打印服务器发送

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
<script type='text/javascript'> 
function showString(time) { 
    if (time=="") { 
     document.getElementById("txtHint").innerHTML=""; 
     return; 
    } 
    $.getJSON('getstring.php?q='+time, function(data) { 
     document.getElementById("txtHint").innerHTML = data.value; 
    }); 
} 
</script> 

编辑值:请关闭外部脚本标记

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
<script type='text/javascript'> 
    //your script 
</script> 
+0

好吧,看起来不错,但不知何故,它仍然无法正常工作。我想这是因为我的PHP没有得到它的变量:xmlhttp.open(“GET”,“getstring.php?q =”+ time,true);了吗? – Andrej

+0

我可以看到你的jquery脚本没有关闭。 '' – joyBlanks

+0

@Andrej您使用Native Ajax做了同样的事情,然后您再次用jQuery Ajax做这件事。因此,如果您有权访问Jquery,为什么不使用jQuery,所以我已经删除了原生的ajax代码 – joyBlanks

0

您忘记关闭脚本标签

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"> 
</script>// close include external javascript tag 

然后调用你的函数脚本标签

<script> 
function showString(time) { 

-----Your code---- 

</script> 
+0

它只是关闭向下滚动码一点点 – Andrej

+0

可以包括外部JavaScript为'<脚本类型=“文本/ JavaScript的” SRC =“myscript.js”>'接近用'' – Saty

0

保持JavaScript函数定义head或之前select标签。像下面 -

<!DOCTYPE html> 
<html> 
    <head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <script type='text/javascript'> 
     function showString(time) { 
     if (time=="") { 
     document.getElementById("txtHint").innerHTML=""; 
     return; 
     } 
     if (window.XMLHttpRequest) { 
     // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
     } else { // code for IE6, IE5 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange=function() { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
      document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
     } 
     } 
     xmlhttp.open("GET","getstring.php?q="+time,true); 
     xmlhttp.send(); 

     var javascriptstring; 
     $.getJSON('getstring.php', function(data) { 
     javascriptstring = data.value; 
     }); 
     document.write(javascriptstring); 

    } 

    </script> 

    </head> 
    <body> 
    <form> 
     <select name="somestring" onchange="showString(this.value)"> 
     <option value="">No string selected</option> 
     <option value="1">String 1</option> 
     </select> 
    </form> 
    </body> 
</html> 
+0

好吧谢谢,改变了,但我的代码的想法仍然无法正常工作 – Andrej

相关问题