0

過去 10 時間、奇妙な問題に直面しており、本当に非常に迷惑です。問題は、php から json データを出力する jquery にあります。PHP スクリプトは正常に実行されていますが、ajax 呼び出しが完了したときに、有効な otput が取得されません。

ここにjqueryコードがあります::

list_choice = "A";
content_choice = "Artists";             //globals to store default value

$(document).ready(function() {
$('.list-nav > a').click(function() {
    var ltext = $(this).text();
    list_choice = ltext;
    console.log(ltext+" <------>    ");        
    $.ajax({            
        url: 'retrieveFileFront.php',
        data: {type: content_choice, navtext: list_choice},
        type: 'POST',
        dataType: 'json',            
        complete: function(data) {                
            console.log(data['message']['Album_Name']);          
        }
    });
    return false;
});

});

私は complete: event を success: として使用する必要がありました: まったく機能しませんでした。少なくとも私は完全なイベントからある種の出力を得ていますが、undefinedそれ[object][Object]はまったくばかげています。

ここにあるretrieveFileFront.php

<?php

require './retrieveFiles.php';

$type = $_POST['type'];
$nav_text = $_POST['navtext'];

$ret_files = new retrieveFiles($type, $nav_text);
$data = $ret_files->retFiles();
if ($data['success'] == FALSE) {
    $data = array('success' => FALSE, 'message' => 'Sorry an Error has occured');
    echo json_encode($data);

} else {
    echo json_encode($data);
}

?>

そしてここに/retrieveFiles.php

<?php

class retrieveFiles {        
    public $content_type;
    public $list_nav;
    public $connection;
    public $result;
    public $result_obj;
    public $tags_array;
    public $query;
    public $row;

    public function __construct($type, $nav_text) {            
        $this->content_type = $type;
        $this->list_nav = $nav_text;     
    }

    public function retFiles() {

        @$this->connection = new mysqli('localhost', 'usr', 'pass', 'data');
        if(!$this->connection) {
            die("Sorry Database connection could not be made please try again later. Sorry for the inconvenience..");
        }

        if ($this->content_type == "Artists") {                

            $this->query = "SELECT album_name, album_art FROM album_dummy NATURAL JOIN album_images_dummy WHERE artist_name LIKE '$this->list_nav%'";               

            try {
                $this->result = $this->connection->query($this->query);
                $this->row = $this->result->fetch_row();

                if (isset($this->row[0]) && isset($this->row[1])) {
                    $this->tags_array = array("success" => true, "message" => array("Album_Name" => $this->row[0], "Album_Art" => $this->row[1]));

                    return $this->tags_array;
                }

        }   catch (Exception $e) {                
                echo 'Sorry an Error has occurred'.$e;
                return false;
            }
        }
   }

}

?>

firebug のコンソールで 200 応答を受け取りました。これは、正常に実行されていることを示しています。

<!DOCTYPE HTML>

{"success":true,"message":{"Album_Name":"Streetcleaner","Album_Art":"\/var\/www\/html\/MusicLibrary\/Musics\/1989 - Streetcleaner\/folder.jpg"}}

jsonが適切にフォーマットされていることがわかるので、これは私をさらに混乱させています。この問題を解決する方法について何か提案をしてください。

前もって感謝します..

4

4 に答える 4

0

長いトラウマの後、ようやく解決策を見つけました。応答テキストを解析してから、オブジェクトに個別にアクセスする必要があることがわかりました。これが作業コードです

list_choice = "A";
content_choice = "Artists";             //globals to store default value

$(document).ready(function() {
$('.list-nav > a').click(function() {
    var ltext = $(this).text();
    list_choice = ltext;
    console.log(ltext+" <------>    ");

    $('#loading').css('visibility', 'visible');

    $.ajax({
        url: 'retrieveFileFront.php',
        data: {type: content_choice, navtext: list_choice},
        type: 'POST'
        dataType: 'json',
        complete: function(data) {

            var res = data.responseText;
            res = res.replace(/<!DOCTYPE HTML>/g, "");
            res = res.trim();

            console.log(res);
            var arr = JSON.parse("[" + res +"]");    //needed to parse JSON object into arrays
            console.log(arr[0].message.Album_Name);
            console.log(arr[0].message.Album_Art);               

            $('#loading').css('visibility','hidden');
        }
    });
    return false;

});

これは正常に機能し、目的の応答が得られます。とにかく助けてくれてありがとう、みんな。

于 2013-07-06T04:35:56.757 に答える