【问题标题】:SyntaxError: Unexpected token m in JSON at position 0 using sessionStorageSyntaxError:使用 sessionStorage 的 JSON 中位置 0 处的意外标记 m
【发布时间】:2017-05-08 08:33:53
【问题描述】:

所以我正在做的是将表单操作发送到 iframe,并使用 JSON.stringify() 存储表单输入数据,以防表单失败。下面是 iframe 用于确认页面的代码,以及第一个 console.log() 的数据。 JSON.parse 部分似乎失败了。

<script type='text/javascript' src="/common/js/jquery-1.12.0-min.js"></script>
<script type='text/javascript'>
$(function(){
    console.log(sessionStorage);
    var formdata    = sessionStorage.getItem('formdata'),
        formid      = sessionStorage.getItem('formid'),
        dataParsed  = JSON.parse(formdata);//,
        //parent      = window.parent.document;

    // We need to check if error, and if failed, then change wizard to be correct
    console.log(formdata, formid);
});
</script>

javascript 的控制台输出如下。第一个带有 sessionStorage 对象的 console.log 输出,下面是 JSON.parse 方法的错误。我对它为什么不能正常工作或可能导致问题的原因感到困惑。

Storage.formdata: "merchant_defined_data1=0&merchant_defined_data2=0&merchant_defined_data3=1&merchant_defined_data4=0&merchant_defined_data5=monthly&merchant_defined_data6=0.00&merchant_defined_data7=0&bill_to_forename=John&bill_to_surname=Madrigal&bill_to_address_line1=+652+S+Walnut&bill_to_address_line2=+&bill_to_address_city=Cookeville&bill_to_address_state=TN&bill_to_address_country=US&bill_to_address_postal_code=38501&bill_to_email=jmadrigal%40tappublishing.com&amount=6.00&override_custom_receipt_page=http%3A%2F%2F74.43.119.28%2Fservice%2Faccount%2Fcsresponse&override_custom_cancel_page=http%3A%2F%2F74.43.119.28%2Fservice%2Faccount%2Fcsresponse
Storage.formid: "optionalPackagesForm"
length: 2


VM8596:1 Uncaught SyntaxError: Unexpected token m in JSON at position 0
at JSON.parse (<anonymous>)
at HTMLDocument.<anonymous> (csresponse:27)
at i (jquery-1.12.0-min.js:2)
at Object.fireWith [as resolveWith] (jquery-1.12.0-min.js:2)
at Function.ready (jquery-1.12.0-min.js:2)
at HTMLDocument.K (jquery-1.12.0-min.js:2)

更新:下面显示了对象的存储方式:

// Store the form data, and any other session data needed for failed transaction_id

var sigSelect = function(){
            var sigFields   = ['card_type','card_number','card_cvn','card_expiry_date','profile_id',
                            'locale','signed_date_time','reference_number', 'method',
                            'currency','signed_field_names','access_key','transaction_uuid',
                            'payment_method','signature','unsigned_field_names','transaction_type'],
                selectState = ':input:not(';

            $.each(sigFields, function(index, val){ selectState += '[name="'+ val +'"],'; });
            selectState = selectState.replace(/,\s*$/,"");
            return selectState += ')'
        },
inp     = $(sigSelect(), form).serialize();


sessionStorage.setItem('formdata', inp);
sessionStorage.setItem('formid', form.attr('id'));

【问题讨论】:

  • 它看起来更像是一个查询字符串,而不是你得到的 json 对象 :)
  • 为了存储表单数据,我使用例如 JSON.stringify($('form :input')) 并将其存储在表单数据值中。
  • Storage.formdata: "merchant_defined_d... " 不在 JSON 中。为什么要解析它?
  • 你能告诉我们你是怎么称呼sessionStorage.setItem的吗?
  • 那么我将如何创建 JSON 字符串?以上是我如何创建的编辑。修改它以使用我存储该对象的方式。

标签: javascript json session-storage


【解决方案1】:
var formData = "merchant_defined_data1=0&merchant_defined_data2=0&merchant_defined_data3=1&merchant_defined_data4=0&merchant_defined_data5=monthly&merchant_defined_data6=0.00&merchant_defined_data7=0&bill_to_forename=John&bill_to_surname=Madrigal&bill_to_address_line1=+652+S+Walnut&bill_to_address_line2=+&bill_to_address_city=Cookeville&bill_to_address_state=TN&bill_to_address_country=US&bill_to_address_postal_code=38501&bill_to_email=jmadrigal%40tappublishing.com&amount=6.00&override_custom_receipt_page=http%3A%2F%2F74.43.119.28%2Fservice%2Faccount%2Fcsresponse&override_custom_cancel_page=http%3A%2F%2F74.43.119.28%2Fservice%2Faccount%2Fcsresponse";
var dataJson = {};
(formData .split('&')).forEach(function(data){
  dataJson[data.split("=")[0]] = data.split("=")[1]; 
});

console.log(dataJson);

dataJson 将包含 JSON 格式的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2017-07-29
    • 1970-01-01
    相关资源
    最近更新 更多