簡體   English   中英

從php ajax響應JSON對象創建jquery數組

[英]create jquery array from php ajax response JSON object

我有一個內部數組的en.php文件,如下所示:

$lang = array(
    // MENÚ LATERAL
    "bienvenido" => "Welcome",
    "panel_administracion" => "Administration panel",
    "administracion" => "Administration",
    "gestion_usuarios" => "Users Management",
    "roles_permisos" => "Roles and Permissions",
    "perfiles" => "Profiles",
    "apariencia" => "Appearance",
    "configuracion" => "Settings",
    "gestion_scripts" => "Script Management",
    "gestion_escenarios" => "Scenario Management",
    "planificador" => "Planner",
    "monitorizacion" => "Monitoring",
    "resultados_ejecuciones" => "Executions Results",
    "dashboard" => "Dashboard",
    // USUARIOS
    "usuario" => "User",
    "nombre_pagina" => "Users",
    "nuevo_usuario" => "New User",
    "nombre_usuario" => "User Name",
    "perfil" => "Profile",
    "rol" => "Role",
    "idioma_sitio" => "Language",
    "password" => "Password",
    "repetir_password" => "Repeat Password",
    "guardar" => "Save",
    "administracion_usuarios" => "User administration",
    "actualizar_usuario" => "Edit user",
    "acciones" => "Actions"
);

我想將此數組存儲在.js文件內的js數組中,以訪問我一直需要的數據,而此代碼可以做到這一點。 但是我收到此警報: [棄用]不贊成在主線程上使用同步XMLHttpRequest,因為它有害 ...

var traducciones = function () {
    var tmp = null;
    var action = "getTraducciones";
    $.ajax({
        'async': false,
        'type': "POST",
        'global': false,
        'dataType': 'html',
        'url': '../egea/lib/egeaAjax/fAjaxUsuarios.php',
        'data': { 'action': action },
        'success': function (data) {
            var datos = JSON.parse(data);
            tmp = datos;
        }
    });
    return tmp;
}();

PHP功能:

function getTraducciones(){
    session_start();
    $traducciones = '';
    $u = $_SESSION['usuario'];
    if (isset($u) === true){
        $lang = getLanguage($u);
        if(isset($lang) === true){
            require "../../lang/".$lang.".php";
        }else{
            require "../../lang/es.php";
        }
    }
    echo json_encode($lang);
}

注意:不贊成使用:false。 沒有ajax async:false調用,我該怎么辦? 謝謝。

返回承諾而不是值本身:

var traducciones = function () {
    return new Promise((resolve, reject) => {
        var action = "getTraducciones";
        $.ajax({
            'async': true,
            'type': "POST",
            'global': false,
            'dataType': 'html',
            'url': '../egea/lib/egeaAjax/fAjaxUsuarios.php',
            'data': { 'action': action },
            'success': function (data) {
                var datos = JSON.parse(data);
                resolve(datos);
            },
            'error': reject
        });
    });
}();

然后像這樣使用它:

traducciones.then(function(datos) {
    // the code that uses the data
}, function() {
    // code called if data loading failed
});

順便說一句,如果您確實需要以同步方式加載數據,則可以考慮將其作為JS代碼而不是JSON進行加載-即替換:

echo json_encode($lang);

在您的PHP代碼中:

Header('Content-type: text/javascript; charset=utf-8');
    // or whatever other charset you are using ^^^^^
echo "var traducciones = " . json_encode($lang) . ";\n";

然后將其作為普通腳本加載:

<script src="../egea/lib/egeaAjax/fAjaxUsuarios.php"></script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM