2014-11-05 4 views
0

У меня есть следующая функция AJAX, которая используется для создания JSON out put. Из-за ошибки в JSON WebService он генерирует ненужный XML и удаляет его, что я использовал регулярные выражения JavaScript.Выход JSON Преобразование в строку без знания

AJAX Функция

function setJsonSer() { 
           var strWsUrl = 'https://www.googleapis.com/analytics/v3/data/ga? 
ids=ga%3A76546294&dimensions='+ 'ga%3Asource&metrics=ga%3Ausers&sort=-ga%3Ausers&start- 
date='+retStartDate()+'&end-date='+retEndDate()+'&max-results=10'; 

formData = { 
        'Email': '[email protected]', 
        'Password': 'password', 
        'URL': strWsUrl 

       }; 
        $.ajax({ 
        url: "/APIWebService.asmx/AnalyticsDataShowWithPost", 
        type: 'POST', 
        data: formData, 

        complete: function(data) { 
           var responseText = data.responseText; 
           var responseJson = JSON.parse(responseText.match(/[{].*.[}]/)); 

          /*01*/ console.log("'responseJson' is " + typeof responseJson); 


      alert(JSON.stringify(responseJson)); //or just `responseJson` if you skip 
    `JSON.parse`*/ 

       /*04*/ Load(JSON.stringify(responseJson)); 

        } 
       }); 
      } 

После удаления ненужных символов переменной разобрана в качестве "объекта". Это должен быть «объект», поэтому я не сомневаюсь в этом. Вы можете видеть это в строке//.

Итак, после этого ответа Json должен проанализировать следующую функцию JavaScript.

Java Script Функция

function Load(responseJson){ 


setJsonSer(); 
//----------------------------------------------- Rohan 
var labels = new Array(); 
     var values = new Array(); 
     var catogories = new Array(); 
     var arrayOfArray = new Array(); 
     var rowData = responseJson; 

    /*02*/console.log("'RowData' is " + typeof rowData);  

     var inData = responseJson; 

     /*03*/console.log("'inData' is " + typeof rowData); 

     var count = 0; 

     var headers = new Array(); 

     /*for (var i = 0; i < inData.columnHeaders.length; i++) { 
      headers[i] = inData.columnHeaders[i].name; 
     }*/ 


     var dates = new Array(); 
     var pageViews = new Array(); 
     var uniqueViews = new Array(); 

     /* for (var key in inData.rows) { 

      pageViews[key] = parseInt(inData.rows[key][1]); 
      uniqueViews[key] = parseInt(inData.rows[key][2]); 

     }*/ 

     $('#container_2').highcharts({ 
      chart: { 
       type: 'areaspline', zoomType: 'x' 
      }, 
      title: { 
       text: 'Pageviews and Bounces' 
      }, 
      legend: { 
       layout: 'vertical', 
       align: 'left', 
       verticalAlign: 'top', 
       x: 150, 
       y: 100, 
       floating: true, 
       borderWidth: 1, 
       backgroundColor: (Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF' 
      }, 
      xAxis: { 
       categories: dates, 
       type: 'datetime', 
       dateTimeLabelFormats: { 
        month: '%d %b', 
       }, 
       tickInterval: 10, 
       plotBands: [{ // visualize the weekend 

        color: 'rgba(68, 170, 213, .2)' 
       }] 
      }, 
      yAxis: { 
       title: { 
        text: 'Visits' 
       } 
      }, 
      tooltip: { 
       shared: true, 
       valueSuffix: ' ' 
      }, 
      credits: { 
       enabled: false 
      }, 
      plotOptions: { 
       areaspline: { 
        fillOpacity: 0.5 
       } 
      }, 
      series: [{ 
       name: 'Page Views', 
       data: pageViews 
      }, { 
       name: 'Bounces', 
       data: uniqueViews 
      }] 
     }); 

} 

Но когда я проверить типы данных ROWDATA и входных данных, переменных, как в строке// и// они показывают мне, как строки. Но это должен быть «объект». Я не могу найти, что я сделал неправильно здесь.

ответ

0

Вы передаете json string вместо json object. так заменить

Load(JSON.stringify(responseJson)); 

с

Load(responseJson); 
+0

Это решило мою проблему. Спасибо, я очень ценю вашу помощь. – ChiranSJ

0

Вы пытались вызвать функцию Load без подтягивания? Или просто используйте JSON.parse на responseJson, если вам нужно подкрепить и отправить его на Load? Ваша потребность использовать метод синтаксического анализа, если вы сначала используете stringify.

+0

Привет, Спасибо за быстрый ответ. Я использовал Load(). Вы можете видеть это в/* 04 * /. – ChiranSJ

+0

Вы не получили моего ответа. Строка «Вы пытались вызвать функцию Load без привязки?» означает, что аргумент передается как 'Load (responseJson)' вместо 'Load (JSON.stringify (responseJson))'. В любом случае у вас есть ответ. Я доволен этим. В следующий раз я попытаюсь более четко прояснить ситуацию. –

Смежные вопросы