我正在尝试向php发送一个js变量并使用相同的变量进行查询。
当我点击标记时,我在控制台上获得Success
,但当我尝试进行查询时,我得到了
Uncaught SyntaxError: Unexpected token < (index):105
(anonymous function) (index):105
request.onreadystatechange (index):185
第105行var data = JSON.parse(data.responseText);
第185行callback(request);
(makeRequest的一部分)
JavaScript的:
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
if (start.value.length <=0){
start.value=data[i].name;
start_cord.value ="("+(data[i].lat +", "+ data[i].lon)+")";
xpto = data[i].name;
$.ajax({
type: 'POST',
url: 'get_waypoint.php',
data: { var1: xpto },
cache: false,
success: function() {
console.log('Success')
}
});
get_waypoint.php:
require 'config.php';
$var = $_POST['var1'];
try {
$db = new PDO($dsn, $username, $password);
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth = $db->query("SELECT distinct * FROM horarios WHERE name ='$var'");
$locations = $sth->fetchAll();
echo json_encode( $locations );
} catch (Exception $e) {
echo $e->getMessage();
}
makeRequest的:
function makeRequest(url, callback) {
var request;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest(); // IE7+, Firefox, Chrome, Opera, Safari
} else {
request = new ActiveXObject("Microsoft.XMLHTTP"); // IE6, IE5
}
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200) {
callback(request);
}
}
request.open("GET", url, true);
request.send();
}
修改
AJAX:
$.ajax({
url: 'get_waypoint.php',
type: 'POST',
data: {var1:start_wp, var2:end_wp},
dataType: 'JSON',
cache: false,
success: function(msg) {
console.log(msg)
console.log('Success')
for (var i = 0; i < msg.length; i++) {
waypts.push({location: new google.maps.LatLng(msg[i].lat, msg[i].lon),
stopover: true})
}
}
});
答案 0 :(得分:0)
您是否可以访问JavaScript请求的PHP页面,看看它是否输出任何错误?您的PHP代码中有$e->getMessage()
。如果显示错误,JavaScript将无法处理该错误,因为它需要JSON。错误以HTML格式输出 - 错误“意外&lt;”因此会有意义。
这是代码中的另一个重要问题。而不是以下:
$sth = $db->query("SELECT distinct * FROM horarios WHERE name ='$var'");
请使用
$sth = $db->prepare("SELECT distinct * FROM horarios WHERE name =?");
$sth->execute( array($var) );
否则,您很容易进行SQL注入。
更新:用户在评论中说他得到Notice: Undefined index: var1 in "location"\get_waypoint.php on line 3
在PHP中,替换:
$var = $_POST['var1'];
使用:
if(isset($_POST['var1'])) {
$var = $_POST['var1'];
}
else {
exit; // Or handle error as you wish
}
您在JavaScript中缺少一组引号。取代
data: { var1: xpto },
到
data: { 'var1': xpto },
答案 1 :(得分:0)
首先,我会详细说明从PHP返回的数据。您的PHP脚本有两个端点;返回JSON编码数据集,或返回PHP错误消息字符串。后者不会被JSON编码,因此当您的浏览器执行JSON.parse方法时,它会因为它不是预期的格式而失败。因此,我建议浏览PHP并检查它是否进入“catch”块。原因可能与数据库有关。
如果你可以确认它没有进入'catch'块,通过成功print_r'ing $ locations变量,并检查$ locations的输出,它可能包含破坏你的JSON的字符。 json_encoding函数有许多可以传递给它的标志,这使得函数能够解析特定的字符集。以下调用将启用所有可能的标志:
json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE);
答案 2 :(得分:0)
尝试以下代码,
function yourfunction(value)
{
if (value=="")
{
document.getElementById("div_id").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("div_id").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getclientip_graph1.php?var1="+value,true);
xmlhttp.send();
}