2016-12-22 7 views
1

フォームアクションがiframeに送信され、フォームが失敗した場合のためにJSON.stringify()を使用してフォーム入力データを格納しています。以下はiframeが確認ページに使用しているコードと最初のconsole.log()のデータです。 JSON.parseセクションでは失敗しているようです。SyntaxError:sessionStorageを使用して、位置0のJSONで予期しないトークンm

<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のコンソール出力は以下のとおりです。最初のconsole.log出力はsessionStorageオブジェクトであり、以下は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) 

UPDATE:以下は、オブジェクトが格納されます方法を示しています。

// 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')); 
+2

jsonオブジェクトよりクエリ文字列のように見えます。 – Icepickle

+0

フォームデータを保存するには、JSON.stringify($( 'form:input'))を使用してformdata値に格納します。 – jamadri

+0

'Storage.formdata:" merchant_defined_d ... "'はJSONにありません。なぜそれを解析したいのですか? –

答えて

3
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形式でデータが含まれています。

関連する問題