繁体   English   中英

通过json_encode传递多个变量

[英]Passing multiple variables through json_encode

我现在用我的代码弄得一团糟,通常我会制作一个PHP-AJAX脚本并使用json_encode将一个变量传回JS脚本。 这次我想用json_encode传递一些变量,遗憾的是我不知道如何在JS中分离值。

我的JS代码:

$('#submit').click(function(){

    // Storing the value into variables
    var content_page = $('#content-page').val();
    var content_url = 'action=saving&page='+content_page;

        // Starting the AJAX post form
        $.ajax({
                type: 'POST',
                url: 'handlers/content.handler.php',
                data: content_url,
                success: function(responseText)
                {
                    $.parseJSON(responseText); // Making the return value of the PHP handler reedable

                    alert(responseText.pageid)

                        if(responseText.indexOf(1) > -1)
                        {
                            noty({ text: 'U heeft geen pagina gekozen om te bewerken!' });
                        }
                        else if(responseText.indexOf(2) > -1)
                        {
                            noty({ text: 'U heeft geen geldige pagina gekozen!' }); 
                        }
                        else if(reponseText.indexOf(100) > -1)
                        {
                            noty({ text: 'Pagina is opgehaald' });
                        }
                }
            });
    return false;
});

我的PHP代码:

<?php
/* Dit bestand handeld gegevens af voor het bestand content in de map panel. Gegevens komen hier door heen via een JS bestand(content.handler.js...) en worden ook weer terug gestuurd. */
include_once '../includes/config.php';

    // Controleren of server contact maakt en geen persoon.
    if(isset($_POST['action']) && $_POST['action'] == 'saving')
    {
        $stringPage = trim($_POST['page']);
        $error = array();
        $bolean = false;

            # Prepared statement.
            $stmt = $mysqli->prepare('SELECT id,name,title,text FROM pages WHERE name = ?');
            $stmt->bind_param('s', $stringPage);
            $stmt->execute();
            $stmt->store_result();
            $stmt->bind_result($pageID, $pageName, $pageTitle, $pageText);
            $stmt->fetch();
            $intPage = $stmt->num_rows();
            $stmt->close();

    /* Controle */
        if(empty($stringPage))
        {
            $error[] = 1;
            $bolean = true;
        }
        if($intPage == 0)
        {
            $error[] = 2;
            $bolean = true;
        }

            if($bolean == false)
            {
                $error[] = 100;

            }


            header('Content-Type: application/json');
            $array = array($error, $pageID, $pageName, $pageTitle, $pageText);
            echo json_encode($array, JSON_FORCE_OBJECT);
    }
?>

所以所有的价值都回来了,所以没有问题。 我的问题是我把所有我想要的东西放在一个数组中(不是最好的解决方案)而且不知道如何在JS中分离。 我建议它会像response.pageid那样但是没有用。

您需要先解析JSON并分配给对象变量。 这是你想念的唯一一步。

此外,返回一个json编码数组就好了。 我一直这样做。 您可以添加“status = success”和“errormessage = someerror”之类的内容,因此它非常方便。

var obj = $.parseJSON(response);

所以在你的情况下,你有PHP中的数组中的值..所以,举个例子来说......

$myarray['fullname'] = 'john doe';
$myarray['userid'] = 777;
$myarray['isadmin'] = false;
$myarray['email'] = johndoe@gmail.com;

你的ajax脚本然后将响应发送回javascript ...

echo json_encode($myarray);

javascript在你的ajax成功函数中得到它...

success: function (data) {
    var responsedata = $.parseJSON(data);

    alert('Fullname: '+responsedata.fullname+' userid: '+responsedata.userid+' isadmin: '+responsedata.isadmin);  //etc etc

}

来自CHAT

我在粘贴箱上看了你的代码

用这个看btw的响应

console.dir(responsetext); //instead of alert

或尝试使用firefox

alert(responsetext.toSource());

responsetext本身是一个对象,不会发出任何警报

把响应文本想象成像php一样的数组,但不是使用myarray['somekey']而是使用myobj.somekey

将您的错误分配更改为

error[1] , error[2], error[100]

而不是error[]

你传递错误,所以这是一个数组,你可以像indexOf()一样访问,或者你可以使用textresponse.error[1]

但你的问题是错误数组的键被分配为0,1,2等。

但是你试图将它们称为1,2,100 ......

因此,通过添加这些数字而不是仅使用error[] ,它将在检查错误响应时找到正确的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM