首页 > 解决方案 > javascript .data() 通过空格剪切字符串内容

问题描述

所以,我有这个问题,我在 web 应用程序中有一个后退按钮。这是按钮的 javascript 代码:

function getPrevFunction()
{
    localDBSelect("prevViews", function (prevViews)
    {
        if (prevViews)
        {
            var prevViewObject = $.parseJSON(prevViews);
            var prevViewArray = prevViewObject['funcObjects'];
            if (prevViewArray.length > 1)
            {
                var prevArrayIndex = prevViewArray.length - 2;
                var actArrayIndex = prevViewArray.length - 1;
                var prevFuncObject = prevViewArray[prevArrayIndex];
                var prevFunc = prevFuncObject['function'];
                var prevConfig = prevFuncObject['config'];
                var inData = prevFuncObject['inData'];
                prevViewArray.splice(actArrayIndex, 1);

                if (inData !== "")
                {
                    if (prevFunc !== "getGuiSiteList")
                    {
                        inData = "<div data-param=" + JSON.stringify(inData) + ">";
                    }
                    $('#fieldcontain')[prevFunc](inData, prevConfig);
                }
                else {
                    $('#fieldcontain')[prevFunc](prevConfig);
                }

                if (prevViewArray.length === 1)
                {
                    setVisibilityForBackBtn(false); //If last..
                }

                prevViewObject['funcObjects'] = prevViewArray;
                localDBInsert("prevViews", JSON.stringify(prevViewObject));
            }
            else {
                setVisibilityForBackBtn(false);
            }
            $('#subcontainer').html("");
            if(!$('#fieldcontain').is(":visible"))
            {
                $('#fieldcontain').show();
            }
        }
    });
}

我的问题是我并不总是得到 json-object 的全部内容。例如; json,一开始它看起来像这样: input = {site: "GAV", location: "EG", set: "INVENTORY", binnum: "B01 T09"}

但是在我尝试使用像这样的html元素获取作为数据/属性传递的json之后: var input = $(inData).data("param");

我收到的值如下所示: input = "{"site":"GAV","location":"EG","set":"INVENTORY","binnum":"B01"

正如你所看到的,它由于某种原因切断了空格之后的所有字符,尽管在最后一个函数被添加到列表中,然后再次调用该函数,也能够在应用。

我确实意识到我的解释很混乱,可能很难理解,但这是我能解释的最好的。如有必要,我可以提供更多代码。

所以,我确实需要getPrevFunction的整个json(它作为“prevViews”传递)

标签: javascriptjquery-mobile

解决方案


使用如下encodeURIComponent()_decodeURIComponent()

设置数据

inData = "<div data-param=" + encodeURIComponent(JSON.stringify(inData)) + ">";

获取数据

var input = JSON.parse(decodeURIComponent($(testDv).data('param')));

现在,由于空格,对象中将没有切割。


推荐阅读