2014-06-30 235 views
2

我在嘗試發送一個js變量給php,並用相同的變量進行查詢。通過AJAX發送變量到PHP

當我上標記點擊我得到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

,您可以訪問PHP頁面JavaScript的請求,看看它是否輸出任何錯誤?您的PHP代碼中有$e->getMessage()。如果顯示錯誤,JavaScript將無法處理該錯誤,因爲它期望JSON。錯誤以HTML格式輸出 - 錯誤「意外的<」因此會有意義。


這是您代碼中的另一個重要問題。取而代之的是以下內容:

$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 }, 
+0

的誤差修改我看到的是那些我張貼在這裏。我不知道它是否有差別,但我忘了說用js腳本的文件是'index.html' – ingalion

+0

是的,但我在談論PHP文件中的潛在錯誤,即在get_waypoint.php中。如果你可以訪問你的Ajax代碼請求的頁面(例如''get_waypoint.php'帶'var1') – ljacqu

+0

,你的意思是'注意:未定義的索引:var1位於第3行的「location」\ get_waypoint.php?準確地說,在發送變量 – ingalion

0

首先,我想澄清什麼正從你的PHP返回的數據。你的PHP腳本有兩個端點;返回一個JSON編碼的數據集,或返回一個PHP錯誤消息字符串。後者不會被JSON編碼,因此當瀏覽器執行JSON.parse方法時,它會因爲它不是預期的格式而失敗。因此,我建議通過PHP瀏覽並檢查它是否進入'catch'塊。其原因可能與數據庫相關。

如果您可以確認它沒有進入'catch'塊,通過成功print_r' $ locations變量並檢查$ locations的輸出,它可能包含損壞JSON的字符。 json_encoding函數有許多可傳遞給它的標誌,這些標誌使函數能夠解析特定的字符集。下面的調用將使所有可能的標誌:

json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE);

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