2015-04-11 3 views
0

Я разрабатываю веб-сайт, который должен отображать представление sql, поэтому я сделал запрос с PHP, но мне нужно показать результат в диаграммах, и я пытаюсь использовать gooch geochart. Поэтому в основном я хочу:Можно ли использовать одну и ту же переменную в двух разных блоках javascript?

  1. Выберите данные из представления SQL с помощью PHP.
  2. Получите данные из PHP в переменную javascript, чтобы я мог использовать ее в диаграмме.
  3. Получите значение переменной javascript для размещения в диаграмме google диаграммы google, чтобы показать, что я хочу.

До сих пор у меня есть точка 1 и точка 2 (я думаю). Но когда я снова пытаюсь использовать переменную javascript в другой части кода, она не имеет значения, поэтому данные не отображаются, я получаю undefined в проводнике.

Соответствующий код:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
</head> 
<body> 
<?php 
    //connections and stuff 

$tsql="SELECT count(*) as Qty, ShipCountry FROM [Orders Qry] group by ShipCountry"; // yes, is the Northwind database example 
    $stmt = sqlsrv_query($conn, $tsql); 
    if ($stmt === false) 
    { 
    FatalError("Failed to query table: ".$tsql); 
    } 
    else 
    { 
     $json=array(); 
     $i=0; 
     echo "<script type='text/javascript'> var countries = []; </script>"; 
     while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) 
     { 
     echo "<script> countries[".$i."]= ". $row['ShipCountry'] .";</script>";   
     $i=$i+1; 
     }   
     //echo "<h1>". $json["ShipCountry"] ."</h1>"; //I was testing, so the problem is not in retrieving the data from the database. 
     sqlsrv_free_stmt($stmt); 
    } 
?> 
<p> 
    <script type="text/javascript"> 
     document.write(countries[0]); 
    </script> 
</p> 
</body> 
</html> 
+0

Не то, чтобы я протестировал ваш скрипт. Попробуйте удалить «var» из сценария. Вместо var countries = 'blah blah' use countries = 'blah blah' дайте мне знать, если это работает –

+0

Нет, это не работает. – Aiapaec

+0

@AryehArmon 'var' необходим в JavaScript, чтобы ввести переменную. Может быть, вы думаете о CoffeeScript? –

ответ

2

Вы забыли процитировать $ строки [ 'СтранаПолучателя'] (кажется, строка);

echo "<script> countries[".$i."]= '". $row['ShipCountry'] ."';</script>";   

Обратите внимание на новые цитаты.

+0

Ницца, я думал, что это что-то вроде javascript, я действительно начинаю в веб-разработке. – Aiapaec

+2

@ El_Mochiq, тогда консоль JavaScript станет вашим другом. :-) Привыкай, чтобы смотреть на него регулярно, у него часто есть ценные вещи, чтобы рассказать тебе! –

0

Раздача JavaScript за два блока работает отлично:

<html xmlns="http://www.w3.org/1999/xhtml"> 
 
<head /> 
 

 
<body> 
 
    <script> 
 
    countries = ['foo']; 
 
    </script> 
 
    <script type="text/javascript"> 
 
    document.write(countries[0]); 
 
    </script> 
 
</body> 
 

 
</html>

Но проблема в том, что ваш PHP не генерирует правильный сценарий Java. Посмотрите на консоль JS вашего браузера, и вы увидите ReferenceError s, потому что вы didn't quote the country names.

+0

PHP работает нормально, я видел это: ' 'и т. Д. И в конце:'

undefined

' – Aiapaec

+0

Отредактировано, что бы отразить актуальную проблему. –

0

Вы должны использовать метод нажимного и Array() Construct

var countries = [];//nope 
var countries = new Array();//yep 

echo "<script> countries[".$i."]= ". $row['ShipCountry'] .";</script>";//nope 
echo "<script> countries.push(".$row['ShipCountry'].");</script>";//yep 

push method documentation

+0

Как мне это сделать? – Aiapaec

+0

Это не правильный ответ. Опубликуйте полную документацию по разрешению ошибок и небольшой фрагмент кода. –

+0

При использовании 'push' упрощает код, это не затрагивает вопрос (может ли одна опорная переменная JS-блока, определенная в другом блоке JS), и проблема с кодом в вопросе (сгенерированный JS был недействителен). Но не следует «push» работать одинаково хорошо на '[]' как на 'new Array()'? –

1

Вы могли бы рассмотреть возможность использования AJAX для запроса другого файла из вашего кода на JavaScript, см http://www.w3schools.com/ajax/ajax_php.asp.

Если у вас есть файл PHP, возвращающий JSON в запрос AJAX, у javascript будет объект, который он понимает, и вы можете его использовать. Таким образом, вы можете иметь все свои javascript в одном месте. Например. это псевдо код:

javascript.js

function gimmeACountry(i){ 
    var countries = AJAX.get('countries.php'); 
    return countries[i]; 
} 

PHP.php

<?php 
    $result = mysql_stuff(...); 
    print json_encode(result); 
?> 

HTML

<html> 
<head> 
    <script src='Javascript.js'> 
</head> 
<body onload="document.write(gimmeACountry(0));"> 
</body> 
</html> 

Если вы действительно хотите использовать только один файл, несколько мысли:

  • Вам не нужно открывать и закрывать инструкцию каждый раз, когда вы пишете javascript. Весь ваш PHP может быть встроен в один.

  • Вы можете выводить большую часть вашего javascript вне блока, а не эхом всего. Я думаю, что PHP яснее. НАПРИМЕР.

    <script> <?php $foo = 'bar'; ?> var foo = <?php echo $foo ?>; document.write(foo); // writes 'bar' </script>

  • Если вы по-прежнему есть проблемы области видимости, вы можете попробовать добавить переменную в окне объекта, например,

    window.countries = []

Это может быть проблематичным, если вы в конечном итоге делает больше вещей с JavaScript позже. Я действительно рекомендую использовать AJAX.

+0

Кажется, это правильный способ сделать это, я попробую и дам вам знать, если это сработает. – Aiapaec

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