Я использую JavaScript / AJAX, поэтому, когда пользователь выбирает «deal_name» из раскрывающегося меню, другая информация будет отображаться с помощью функции showPartnerInfo. Вот соответствующий фрагмент из файла k1.php:
function showPartnerInfo(str){
if (str == "") {
document.getElementById("pshipInfo").innerHTML = "";
return;
} else {
var dealName = str;
$.ajax({
type: "GET",
url: 'get_partnerInfo.php?q=',
//dataType: 'JSON',
data: {"q" : dealName},
success: function(json){
//alert(data);
var data = JSON.parse(json);
document.getElementById("pshipInfo").innerHTML = data.tax;
//document.getElementById("pshipInfo").innerHTML = json[1];
},
error: function(){
alert("error");
}
});
}
}
</script>
</head>
<body>
<?php
include ("session.php");
include ("navbar.php");
$taxID = "";
?>
<form style = "margin-top: 60px" action = "k1_2DB.php" method = "post">
<div class = "well">
<h1>K1 - Tax Update</h1>
<?php
$query = "SELECT DISTINCT deal_name FROM tbl_deal";
$result = mysqli_query($DBconnect, $query);
if (mysqli_num_rows($result) > 0){
echo "<select name='deal_name' onchange='showPartnerInfo(this.value);'>
<option value=''>Select Investment</option>";
while($row = mysqli_fetch_array($result)) {
echo "<option value='$row[0]'>$row[0]</option>";
}
}else{
echo "<select name=''><option value=''>No Investments Found</option>";
}
echo "</select>";
?>
Вот файл get_partnerInfo.php:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<?php
include("config.php");
$q = $_GET['q'];
if (!$DBconnect) {
die('Could not connect: ' . mysqli_error($DBconnect));
}
$pship_query = "SELECT tbl_deal.deal_name, tbl_partnership.pship_name,
tbl_partnership.pship_taxID,
tbl_partner.partner_name,
tbl_deal.deal_tax_id
FROM tbl_deal
INNER JOIN tbl_partnership
ON tbl_deal.pship_ID = tbl_partnership.pship_ID
INNER JOIN tbl_partner
ON tbl_deal.partner_manag_ID = tbl_partner.partner_ID
WHERE tbl_deal.deal_name = '".$q."'";
$result = mysqli_query($DBconnect,$pship_query);
$row = mysqli_fetch_array($result);
$myArray = array(
"tax" => $row["pship_taxID"],
"name" => $row["pship_name"],
"dealTax" => $row["deal_tax_id"],
"parName" => $row["partner_name"]);
$json = json_encode($myArray);
echo $json;
mysqli_close($DBconnect);
?>
</body>
</html>
Когда я запускаю приведенный выше код, ничего не происходит, и в консоли появляется следующая ошибка:
VM245:1 Uncaught SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse () at Object.success (k1.php:60) at u (jquery.min.js:2) at Object.fireWith [as resolveWith] (jquery.min.js:2) at k (jquery.min.js:2) at XMLHttpRequest. (jquery.min.js:2)
Я видел другие ответы о том, как справиться с этим (как переполнение стека, так и другие), и, похоже, ничего не помогает. Важно отметить, что на вкладке сети в инструментах разработчика вывод get_PartnerInfo.php:
{"tax":"45666XA","name":"Daniels and Partners","dealTax":"SEA485","parName":"Harry Petre"}
и если я не использую JSON.parse в функции showPartnerInfo, вышеуказанное отображается без проблем. Похоже, возникла проблема с преобразованием объекта json в javascript. Любой совет?
Почему голосование против?
Потому что фейспалм ?♂️ и фактически неверная информация в вопросе…?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


После комментария Рикденхаана я вынул теги html и body из get_partnerInfo.php и просто оставил текст внутри файла. Теперь работает без проблем!
Это не может быть (полностью) выводом для get_PartnerInfo.php - вы выводите doctype, HTML-тег, заголовок и тело. Ничего из этого не должно быть для ответа JSON.