簡體   English   中英

使用AJAX將變量發送到PHP

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM