Vi faccio vedere questo codice che funziona bene, riesce a passare i dati al php senza json_encode:

codice HTML:
 $(document).ready(function () {
     //catch form submit
     $(".form-horizontal").submit(function () {
        return false;    });     
    //button login click
    $("#btn-login").click(function () {
        var  un    = $("#login-username"),
              pa    = $("#login-password");
       //validate login form
       if(login.validateLogin(un, pa) === true) {
            //validation passed, prepare data that will be sent to server
            var data = {
                username: un.val(),
                password: pa.val(),
                id: {
                    username: "login-username",
                    password: "login-password"
                }
            };
                        //send login data to server
            login.loginUser(data);
       }
    });

    //set focus on username field when page is loaded
    $("#login-username").focus();});

/** LOGIN NAMESPACE ======================================== */

var login = {};
login.loginUser = function (data) {
    var btn = $("#btn-login");
    ryvengine.loadingButton(btn, "Loging in...");
    //encrypt password before sending it through the network
    data.password = CryptoJS.SHA512(data.password).toString();
    $.ajax({
        url: "RYVAjax.php",
        type: "POST",
        data: {
            action  : "checkLogin",
            username: data.username,
            password: data.password,
            id      : data.id
        },
        success: function (result) {
           ryvengine.removeLoadingButton(btn);
           if(result === "true")
               window.location = "index.php";
           else {
               ryvengine.displayErrorMessage($("#login-username"));
               ryvengine.displayErrorMessage($("#login-password"), result);
           }
        }
    });
};
In questo modo riesce a passare gli input al php, che differenza c'è con quello precedente?