Question

Apologies if this has been answered before but I couldn't find what I was looking for. So, I use $.getJSON to send some variables to a php file. The file returns success as true but for some reason always triggers the .fail function.

The weird thing is, it all works fine on my laptop, just not on the computer at university. Connection to the database is fine, like I said everything works and it returns all the correct data but doesn't trigger the success function.

JQuery:

function request_user_review() {

    $.getJSON("user_review_list.php", success_user_review).fail(fail_user_review);

}

function success_user_review(response) {
    if (response.success) {

        var user_review_list = "";
        $("#user_reviews .review_cafe").remove();
        $("#user_reviews .review").remove();
        $("#user_reviews .rating").remove();
        $("#user_reviews .review_choice").remove();


        for (var i = 0; i < response.rows.length; i++) {
            var review_cafe = '<tr id="row_' + response.rows[i].id + '"><td class="review_cafe">'
                + response.rows[i].cafe + '</td>';
            var review = '<td class="review">'
                + response.rows[i].review + '</br>Review left: ' + response.rows[i].date + '</td>';
            var rating = '<td class="rating">'
                + response.rows[i].rating + '/5</td>';
            var review_choice = '<input type="hidden" class="cafe_id" value="' +  response.rows[i].cafe_id + '" /><td class="review_choice"><button   onclick="request_edit(this.id)" id="edit_' + response.rows[i].id + '" class="btn_edit">Edit</button><button onclick="request_delete_review(this.id)" id="delete_' + response.rows[i].id + '" class="btn_delete">Delete</button></td></tr>';

            user_review_list += review_cafe + review + rating + review_choice;
        }
        $("#user_reviews").html(user_review_list).trigger("create").trigger("refresh");
    } else {
        $("#review_message").html("Review failed to be  loaded!").trigger("create").trigger("refresh");
    }
}

function fail_user_review() {
    $("#review_message").html("Connection down?").trigger("create").trigger("refresh");
}

PHP:

<?php //user_review_list.php
require_once "sql.php"; //connection to database and query is handled here
require_once "logged_in.php";

error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors','On');

$session_id = $_SESSION['userid'][0];

$result = array();
$result['success'] = false;
$query = "SELECT * FROM reviews WHERE user = $session_id;";

if ($result_set = Sql::query($query)) {
    $result['success'] = true;
    $result['message'] = "Your Reviews" ;
    $rows = mysqli_num_rows($result_set);
    $result['rows'] = array();
    for ($i = 0; $i<$rows; $i++) {
        $tmpRow = mysqli_fetch_assoc($result_set);
        $php_date = strtotime($tmpRow['date']);
        $formatted_php_date = date('M d, Y', $php_date );
        $tmpRow['date'] = $formatted_php_date;

        $result['rows'][$i] = $tmpRow;
    }

} else {
    $result['message'] = "Failed to read Reviews" ;
}

print(json_encode($result)); 

Thanks James

Was it helpful?

Solution

The messages you get mean you're trying to parse something that's already JSON. My earlier statement about parsing JSON is not going to be of much help here because you're not just getting back a string that needs to be converted to JSON -- which you really shouldn't be with $.getJSON().

You're getting back a JSON with an invalid encoding somewhere along the line, so trying to parse it won't help you. Validate your JSON first and foremost (the error could be due to your differing server settings between machines) using jsonlint, and continue from there.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top