使用AJAX将变量发送到PHP

时间:2014-06-30 08:44:08

标签: javascript php ajax json

我正在尝试向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})
        }
    }
});

3 个答案:

答案 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();
 }