Php Json结果数据未正确显示
嗨,我有一个小项目,将显示过去4,6周的新闻。我已经创建了一个选择框,它将询问过去4,6周的新闻。和提交按钮。所以用户从选择框中选择新闻,点击提交按钮,他将得到结果。但我没有得到正确的输出,甚至没有得到任何错误。默认情况下,我不知道为什么输出显示来自数据库的数据。我的提交按钮甚至没有显示为活动。我犯了一个无法识别的小错误。谢谢 js文件Php Json结果数据未正确显示,php,html,json,select,Php,Html,Json,Select,嗨,我有一个小项目,将显示过去4,6周的新闻。我已经创建了一个选择框,它将询问过去4,6周的新闻。和提交按钮。所以用户从选择框中选择新闻,点击提交按钮,他将得到结果。但我没有得到正确的输出,甚至没有得到任何错误。默认情况下,我不知道为什么输出显示来自数据库的数据。我的提交按钮甚至没有显示为活动。我犯了一个无法识别的小错误。谢谢 js文件 $.ajax({ type: "POST", url: "ajax/edit_news.php",
$.ajax({
type: "POST",
url: "ajax/edit_news.php",
dataType : 'json',
cache: false,
data: {'aktion' : 'edit-news'},
success: function(data){
$('#editnews').html(data.html);
}
});
这是我的密码:
<?php
chdir('..');
include 'constant/const_system.inc.php';
include 'functions/ad_json.inc';
include 'functions/ad_formulare.inc';
include 'constant/const_system_db.inc.php'; //database file
$return = array();
if(isset($_POST['BtnSubmit']))
{
if(($_POST['news'])==4){
$sql=" SELECT DISTINCT ad_news_texte.headline, ad_news.datum_archiv
FROM ad_news_texte
INNER JOIN ad_news_oe ON ad_news_texte.news_id = ad_news_oe.id_ad_news
INNER JOIN ad_news ON ad_news_oe.id_ad_news = ad_news.id
WHERE ad_news.datum_archiv
BETWEEN curdate( ) - INTERVAL DAYOFWEEK( curdate( ) ) +28
DAY AND curdate( )
";
$sql_select=mysql_query($sql);
while($row = mysql_fetch_array($sql_select)) {
echo $row['headline'] . " " .$row['datum_archiv'] ;
echo "<br>";
}
}
if(($_POST['news'])==6){
$sql=" SELECT DISTINCT ad_news_texte.headline, ad_news.datum_archiv
FROM ad_news_texte
INNER JOIN ad_news_oe ON ad_news_texte.news_id = ad_news_oe.id_ad_news
INNER JOIN ad_news ON ad_news_oe.id_ad_news = ad_news.id
WHERE ad_news.datum_archiv
BETWEEN curdate( ) - INTERVAL DAYOFWEEK( curdate( ) ) +42
DAY AND curdate( )
";
$sql_select=mysql_query($sql);
while($row = mysql_fetch_array($sql_select)) {
echo $row['headline'] . " " .$row['datum_archiv'] ;
echo "<br>";
}
}
}
if($param['aktion'] == 'edit-news')
{
$html = '
<form name="UserInformationForm" method="POST" action="#">
<select name="news">
<option value="4" '. (($_POST['news']=="4") ? "selected=selected" : "" ) .'>Show news from last 4 weeks</option>
<option value="6" '. (($_POST['news']=="6") ? "selected=selected" : "") .'>Show news from last 6 weeks</option>
</select>
<br/><br/>
<input name="BtnSubmit" type="submit" value="Submit" >
</form>
';
$return = array(
'status' => 1,
'html' => $html
);
echo json_encode($return);
die();
}
?>
您返回的是一个与html混合的无效的json
,这就是它不起作用的原因,下面是您需要更改的代码
//Change this in both places
...
$news = '';
$sql_select=mysql_query($sql);
while($row = mysql_fetch_array($sql_select)) {
$news .= $row['headline'] . " " .$row['datum_archiv'] ;
$news .= "<br>";
}
...
//and return news like below
$return = array(
'status' => 1,
'news' = $news
);
//Return the json
header('Content-Type: application/json');
exit(json_encode($return));
//在两个位置都更改此选项
...
$news='';
$sql\u select=mysql\u查询($sql);
而($row=mysql\u fetch\u数组($sql\u select)){
$news.=$row['headline']。“”.$row['datum_archiv'];
$news.=“
”;
}
...
//并返回如下消息
$return=array(
“状态”=>1,
'新闻'=$news
);
//返回json
标题('Content-Type:application/json');
退出(json_编码($return));
试试这个
$.ajax({
type: "POST",
url: "ajax/edit_news.php",
dataType : 'html',
cache: false,
data: {aktion: 'edit-news'},
success: function(data){
$('#editnews').html(data.html);
}
});
和做回显html。不使用json
像echo$html代码>。这将解决您的问题在文件顶部的下一行添加
标题('Content-Type:application/json') 在这里发布js代码是js还是json?我没有使用js。脚本回显HTML和回显JSON是没有意义的。如果客户端需要HTML,那么JSON就没有意义。如果客户端需要JSON,HTML会破坏解析。如果你不使用Javascript,为什么要回显JSON?您需要在客户端上使用一个脚本来解析JSON并正确格式化。是的@Barmar您是对的,但是您有相同的解决方案吗,因为我对使用JSON数据格式非常陌生。为什么您认为mysql\u fetch\u array()
不起作用?它同时返回数字列和命名列。您正在考虑的是只返回数字数组的mysql\u fetch\u row
。我已经尝试过了,但还不走运,您所做的更改已经在运行,但现在甚至不需要js文件。如果我使用这个条件:如果($param['aktion']=='edit news'),那么什么也不显示。那么js和ajax在这里有什么用途呢?什么。那么你是如何回显的呢?如果我删除if条件并直接在底部添加echo$html,那么它将回显…一定要删除你的条件。只需使用我提供的ajax代码。逻辑上没有大的变化。我们只是回显html,而不是回显json。试试看,如果对你有用的话,告诉我。ajax代码中也有一个小的变化。我已经更新了。