Php Json结果数据未正确显示

Php Json结果数据未正确显示,php,html,json,select,Php,Html,Json,Select,嗨,我有一个小项目,将显示过去4,6周的新闻。我已经创建了一个选择框,它将询问过去4,6周的新闻。和提交按钮。所以用户从选择框中选择新闻,点击提交按钮,他将得到结果。但我没有得到正确的输出,甚至没有得到任何错误。默认情况下,我不知道为什么输出显示来自数据库的数据。我的提交按钮甚至没有显示为活动。我犯了一个无法识别的小错误。谢谢 js文件 $.ajax({ type: "POST", url: "ajax/edit_news.php",

嗨,我有一个小项目,将显示过去4,6周的新闻。我已经创建了一个选择框,它将询问过去4,6周的新闻。和提交按钮。所以用户从选择框中选择新闻,点击提交按钮,他将得到结果。但我没有得到正确的输出,甚至没有得到任何错误。默认情况下,我不知道为什么输出显示来自数据库的数据。我的提交按钮甚至没有显示为活动。我犯了一个无法识别的小错误。谢谢

js文件

$.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代码中也有一个小的变化。我已经更新了。