简体   繁体   中英

how to pass array string in JavaScript function from PHP end as a argument?

I am getting the error missing ) after argument list in my Firebug console.

emissing ) after argument http://a8.sphotos.ak.fbcdn.net/hphotos-ak-snc7/s720x720/393131_320846714645076_100001592501599_911297_470580896_n.jpg

My question is how to pass $char_data variable in JavaScript function as a argument

Define php variable:

<?php 
$chart_data = "['NBA',1],['NFL',2],['MLB',3],['NHL',4]"; 
$div = "graph";
?

Call JavaScript function with define argument

<script>
dynamicChartArray('<?php echo $div;?>','<?php echo $chartdata;?>')
</script>

A function of JavaScript

<script>
function dynamicChartArray(div,chartdata){
var myData = new Array(chartdata);
var myChart = new JSChart(div, 'pie');
alert(chartdata+div);
}
<script>

Instead of

$chart_data = "['NBA',1],['NFL',2],['MLB',3],['NHL',4]"; 

Use

$chart_data = "[\"NBA\",1],[\"NFL\",2],[\"MLB\",3],[\"NHL\",4]"; 

Change your call to this:

dynamicChartArray('<?php echo $div;?>',[<?php echo $chartdata;?>])

And function to this:

function dynamicChartArray(div,chartdata){
var myData = chartdata;
var myChart = new JSChart(div, 'pie');
alert(chartdata+div);
}
'<?php echo $chartdata;?>'

This is going to echo '['NBA',1],['NFL',2],['MLB',3],['NHL',4]' . Note how there are single quotes inside the single quotes.

 new Array(chartdata)

This will just make an array, with one element, the string "['NBA',1],['NFL',2],['MLB',3],['NHL',4]" .

Try doing dynamicChartArray('<?php echo $div;?>',[<?php echo $chartdata;?>])

This will make chartdata an array of arrays.

Rather than creating an array out of a string in javascript, why not just just get the PHP to output it as an array to start with?

Just add an extra set of [] which javascript reads as an array.

$chart_data = "[['NBA',1],['NFL',2],['MLB',3],['NHL',4]]"; 

then ditch the quotes on the output (which are responsible for causing the error messages)

 dynamicChartArray('<?php echo $div;?>', <?php echo $chartdata;?>);

and then myData can just equal chart data (since its already an array)

var myData = chartdata;

change this:

dynamicChartArray('<?php echo $div;?>','<?php echo $chartdata;?>')

to this:

dynamicChartArray('<?php echo $div;?>', [<?php echo $chart_data;?>]);

and see if it works

You dont need var myData = new Array(chartdata); .

chartdata is already an array.

Take a look at json_encode .

$chart_data = json_encode(array(array('NBA',1),array('NFL',2)));

which will produce a json string ready to echo into your script

string(21) "[["NBA",1],["NFL",2]]"

You should have a look at the output. I bet it is:

dynamicChartArray('graph','['NBA',1],['NFL',2],['MLB',3],['NHL',4]')

and you can already see that you have problems with the quotes.

Instead of creating a string, I suggest to create an array and use json_encode :

$chart_data = array(
    array('NBA',1),
    array('NFL',2),
    array('MLB',3),
    array('NHL',4)
);

and

dynamicChartArray('<?php echo $div;?>', <?php echo json_encode($chartdata); ?>)

JSON happens to be valid JavaScript as well and it gives you more possibilities to process the data on the server side.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM