【问题标题】:Separating PHP variables in JSON string在 JSON 字符串中分离 PHP 变量
【发布时间】:2015-05-07 18:33:24
【问题描述】:

我有点迷失如何解决我的问题。我有一些关于 PHP 的代码,它通过数组传递数据(错误、页面(id、名称、标题等),并且该数组已使用 parseJSON 设置。如果我提醒响应,我将得到一个具有正确值的数组. 但是我的问题是,响应总是不同的,因此 PHP 变量会发生变化。

我尝试过 responseText.pageid 或 responseText.error[1] 之类的方法,但是因为它可能不同,所以它不起作用。而且我不知道我是否需要调用它 responseText.pageid 因为在数组中它是 $pageid 或不同的东西......

所以警报 responseText 给了我一个很好的结果,但不幸的是,将它分开是行不通的。

我的 JS 代码:

    // Variables
    var content_page = $('#content-page').val();
    var content_url = 'action=chose&page='+content_page;

    /* Starting AJAX post form */
        $.ajax({
            type: 'POST',
            dataType: "JSON",
            url: 'handlers/content.handler.php',
            data: content_url,
            success: function(responseText)
            {
                var obj = $.parseJSON(responseText);
                console.dir(obj.error);

                    if(obj.error[1] > -1)
                    {
                        noty({ text: 'U hebt geen pagina gekozen!' });
                    }
                    else if(obj.error[2] > -1)
                    {
                        noty({ text: 'De gekozen pagina bestaat niet!' });
                    }
                    else if(obj.error[100] > -1)
                    {
                        noty({ text: 'Uw pagina wordt opgehaald...' });
                    }
            }
        });
    return false;
});

我的 PHP 代码:

// Storing the variables.
        $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 = false;
                }
                if($intPage == 0)
                {
                    $error[] = 2;
                    $bolean = true;
                }

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

            header('Content-Type: application/json');
            $aVariables = array('error' => $error, 'id' => $pageID, 'name' => $pageName, 'title' => $pageTitle, 'text' => $pageText);
            echo json_encode($aVariables, JSON_FORCE_OBJECT);

我用谷歌搜索并得出结论,我需要从 parseJSON 中创建一个变量,但不幸的是我没有得到任何结果。我当前的结果 (http://prntscr.com/72c39h) 可以正常工作,但将其与 responseText.home 分开不起作用。

提前感谢您,对于糟糕的语法和语言,我深表歉意!

【问题讨论】:

  • 屏幕截图中的警报显示您处理的不是 JSON 数据,而是一个字符串。例如,如果你想将这些值分成一个数组,你可以var separated = responseText.split(','); console.log(separated)
  • 感谢@azium 的帮助。我已经尝试过了,现在已经用工作数组和 parseJSON 更新了我的 PHP 和 JS。但现在 var obj 无法读取,并给我 null 作为返回。对此有什么想法吗?再次感谢您的帮助!

标签: javascript php jquery ajax json


【解决方案1】:

不用var obj = $.parseJSON(responseText);,这个responseText已经是json格式了。如果您想访问error,只需简单地通过responseText.error 或“alert(responseText.error);”来引用它。而且也不需要设置header('Content-Type: application/json');

【讨论】:

    【解决方案2】:

    调用 JQuery 的 parseJSON() 时,您必须同时正确调用它,例如$.parseJSON(),并将其存储在变量中,例如var obj = $.parseJSON(responseText);,根据documentation

    【讨论】:

    • 感谢您这么快回复。但是我现在怎么能调用错误呢?是 obj.error 还是 obj.home ?如何调用数组中的变量?此外,当我使用 console.log 或警告 obj 或 obj.error 时,我会得到一个“null”返回。感谢您的帮助! :-)
    • JSON 将键映射到值,它认为您只是在传递键。看看这个answer 以获得问题/解决方案的说明
    • 谢谢@bipolpants,我已经更新了 PHP 和 JS。我的 PHP 现在有一个工作数组 (prntscr.com/72cpda),但是当我尝试使用 obj.error 或 console.dir/log(obj) 时,它给了我错误 null(prntscr.com/72cpsv)。再次非常感谢您帮助我!
    • obj 在控制台中是什么样子的?
    • 感谢您的回复。它返回 null(警告它给出未定义)。它给了我无法读取 null 错误的属性。这只发生在我创建变量 obj = $.parsejson ... 时。通常其余代码都可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 2013-03-30
    • 2013-04-18
    • 1970-01-01
    相关资源
    最近更新 更多