[英]Send variable to PHP with AJAX
我正在嘗試將js變量發送到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})
}
}
});
您可以訪問JavaScript請求的PHP頁面並查看它是否輸出任何錯誤? 您的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 },
首先,我將明確說明從PHP返回的數據是什么。 您的PHP腳本有兩個端點; 返回JSON編碼的數據集,或返回PHP錯誤消息字符串。 后者將不會進行JSON編碼,因此,當您的瀏覽器執行JSON.parse方法時,它會因為沒有采用預期的格式而崩潰。 因此,我建議您遍歷PHP,並檢查它是否進入了“ catch”塊。 其原因可能與數據庫有關。
如果您可以通過成功print_r'$ locations變量並檢查$ locations的輸出來確認它沒有進入'catch'塊,則它可能包含破壞JSON的字符。 json_encoding函數具有許多可以傳遞給它的標志,這些標志使函數可以解析特定的字符集。 以下調用將啟用所有可能的標志:
json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE);
試試下面的代碼,
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.