2016-03-29 3 views
0
function drawVisualization() { 
    var query = new google.visualization.Query('http://spreadsheets.google.com/tq?key=XXXXXXX'); 
    query.setQuery('SELECT B, C, D, E, F, G, H where upper(B) like upper("%<?php echo $search; ?>%") or upper(D) like upper("%<?php echo $search; ?>%") or upper(E) like upper("%<?php echo $search; ?>%") or upper(F) like upper("%<?php echo $search; ?>%") order by G DESC label G "Data"'); 
    query.send(handleQueryResponse); 
} 

function handleQueryResponse(response) { 
    if (response.isError()) { 
     alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage()); 
     return; 
    } 

    var data = response.getDataTable(); 

    var formatter = new google.visualization.PatternFormat(
     '<a href="{6}" target="_blank" onclick="var that=this;_gaq.push([\'_trackEvent\',\'Download archivio materiali\',\'{2}\',this.href]);setTimeout(function(){location.href=that.href;},200);return false;">{2}</a>'); 
    // Apply formatter and set the formatted value of the first column. 
    formatter.format(data, [0, 1, 2, 3, 4, 5, 6], 2); 

    var view = new google.visualization.DataView(data); 
    view.setColumns([2, 0, 1, 4, 5]); // Create a view with the first column only. 

    visualization = new google.visualization.Table(document.getElementById('table')); 
    visualization.draw(view, { 
     legend: 'bottom', 
     allowHtml: true 
    }); 

} 

Это меньше сниппет заинтересован этим вопросом:Экранирование символов Javascript

var formatter = new google.visualization.PatternFormat('<a href="{6}" target="_blank" onclick="var that=this;_gaq.push([\'_trackEvent\',\'Download archivio materiali\',\'{2}\',this.href]);setTimeout(function(){location.href=that.href;},200);return false;">{2}</a>'); 

Это делает работу отлично (он выводит законный якорь с правильными данными), за исключением случаев, когда в звание документ (выходной переменной {2}) присутствует символ, как двойные кавычки (") синтаксис якорь будет ввернут:.

enter image description here

Нужно ли мне избегать/заменять двойные кавычки с помощью функции, например replace? Как я могу это сделать?

JSFIDDLE

+0

Можете ли вы предоставить пример работы с библиотеками JavaScript, включенными в https://jsfiddle.net/? –

+0

Hi Quasimodo, это JSFiddle: https://jsfiddle.net/multiformeingegno/xyqF7/15/ – MultiformeIngegno

+0

См. Jsfiddle в моем ответе. –

ответ

0

Попробуйте на замену {2} что-то вроде:

var str = 'say: "blabla"'; 
str = str.replace(/"/g, '\\"'); 
console.log(str); 

Я обновил свой fiddle code и вставили:

// add a column with manipulated data 
    var targetColIdx = data.getNumberOfColumns();   // will be the index of added column 
    data.addColumn('string'); 
    var sourceColIdx = 2;         // get data from col 2 
    var rowCount = data.getNumberOfRows();     // save for loop condition 
    var manipulated = ""; 
    for(var rowIndex=0; rowIndex<rowCount; rowIndex++) 
    { manipulated = data.getValue(rowIndex, sourceColIdx); // get original 
    manipulated = encodeURIComponent(manipulated);  // do some manipulation 
    data.setCell(rowIndex, targetColIdx, manipulated); // store in new column 
    } 

// modificated format: only use uri-encoded column in onclick attribute 
    var formatter = new google.visualization.PatternFormat(
    '<a href="{6}" target="_blank" onclick="var that=this;_gaq.push([\'_trackEvent\',\'Download archivio materiali\',\'{'+targetColIdx+'}\',this.href]);setTimeout(function(){location.href=that.href;},200);return false;">{2}</a>'); 

Я не дополнительно исследовал, что произойдет с строкой в ​​обработчике событий кликов. Возможно, вам понадобится другая кодировка или экранирование, как в приведенном выше примере RegExp. Вы можете адаптировать линию manipulated = encodeURIComponent(manipulated); к вашим потребностям.

+0

Могу ли я выполнить консоль.log ({2} .replace (/ "/ g, '\\"')); '? – MultiformeIngegno

+0

Я не знаю API Google. Я думаю, что переменная {2} является некоторым полем в 'data', полученном из' response.getDataTable() '. 'console.log' - это просто отладочный вывод. Вы можете открыть консоль в Firefox с помощью ctrl + shift + k. –

+0

Я думаю, 'data [1]' (потому что индекс на основе 0) может быть заменой {2}. Попробуйте 'console.log (data)', откройте консоль, щелкните на выходе и проверьте структуру данных. –

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