2012-12-03 18 views
10

Używam wtyczki mapy do renderowania niektórych danych. Dane pochodzą z DB i do pliku json - skrypt działa świetnie. Zdecydowałem się użyć danych bezpośrednio z wyjścia php zamiast tworzyć plik json. Z jakiegoś powodu javaScript nie akceptuje bezpośredniego wejścia php. Używam CodeIgniter MVCJak używać JSON-a z db/php w JavaScript

Oto przykładowy kod, który obecnie działa:

$.getJSON('_data/index/data.json', function(data){ ... 

Oto, co starałem:

var dataMap = '<? print $mapData;?>'; 
     $.getJSON(dataMap, function(data){... 

* EDIT 2 *

Based na odpowiedzi - ta opcja też nie działa.

var dataMap = '<?php echo $mapData;?>'; 
     $.get(dataMap, function(data){... 

A oto dane json

{"countries":{"AL":"1","GB":"1","RS":"1","BG":"6","CA":"3","AT":"2","CD":"1"}} 

EDIT

$ rzecz firmy MapData jest

FOREACH LOOP 
$retdata['countries'][] = strtoupper($row->code); 
$retdata['num'][] = $row->num; 
ENDFOREACH LOOP 
$retdata['countries'] = array_combine($retdat['code'], $retdata['num']); 
$retdata = json_encode($retdata); 

I to jest drukowane w pliku jako normalne. To jest w modelu, a następnie przekazuję go do kontrolera, a następnie do widoku. Ciąg znaków jest taki sam w pliku $dataMap, który mam w pliku i ten, który jest wysyłany do widoku.

+0

Spróbuj echo: 'var dataMap = ' '; ' – peacemaker

+0

Czy możesz nam pokazać czym jest' $ mapData'? '$ .getJSON' jest skrótem do zapytania ajaxowego na serwer. to jest ścieżka/URL do czegoś, co zwraca dane JSON. – peacemaker

+0

print_r ($ mapData) jest taki sam jak powyższe dane json. Kiedy używam echa, konsola dodaje json do linku i drukuje 403 (zabronione) jquery.min.js: 2 – Ando

Odpowiedz

3

Jeśli zamierzasz bezpośrednio wstawić dane JSON do zmiennej javascript (zamiast używać AJAX), nie powinieneś w ogóle potrzebować połączenia getJSON. Po prostu napisz obiekt bezpośrednio w ten sposób.

var js_object = <?php echo $mapData; ?>; 
alert(js_object.countries.AL); 
alert(js_object.countries.GB); 

Zauważ, że ciąg PHP nie jest echem w załączając cytatów, oznacza to, że są bezpośrednio tworząc JavaScript Object dosłowny, a nie ciąg znaków, który następnie musi zostać przetworzony do obiektu poprzez JSON.parse()

+0

zobacz EDIT 2 – Ando

+1

Chyba nie śledzę tego, co próbujesz zrobić. Nie potrzebujesz wcale 'get' lub' getJSON', jeśli po prostu wstawiasz obiekt JSON do zmiennej javascript podczas tworzenia źródła strony. Możesz wtedy użyć tego obiektu w dowolnej funkcji, jaką chcesz. Zobacz moją odpowiedź aktualizacji na przykład, jak korzystać z obiektu. –

+0

Mam to Mike, dzięki. Nic nie wiem o JS. :( – Ando

1

Kontynuując ze zaktualizowanego kodu wygląda na to, że w ogóle nie musisz dzwonić pod numer getJSON, ponieważ masz już dane json.

Po prostu weź <? echo $mapData;?> i przypisz do zmiennej w kodzie javascript i użyj jej bezpośrednio.

+0

proszę zobaczyć EDIT 2 – Ando

1

Używaj bezpośrednio mapy danych jako JSON.

alert(dataMap.countries.AL); //output: 1 
1

Chociaż podane odpowiedzi zrobić pracy, warto wdrożyć go inaczej więc kod jest łatwiejszy w utrzymaniu.

Możesz mieć kontroler, który obsługuje wszystkie połączenia api i umieszczać tam wszystkie funkcje związane z mapami.

Jeśli kontroler nazywa maps i utworzyć countries metodę, która pobiera z bazy danych i zwraca json z krajami, a następnie w swoim JS można zrobić:

$.get('maps/countries', function(data){ 
    console.log(data.countries); 
    //outputs: {"AL":"1","GB":"1","RS":"1","BG":"6","CA":"3","AT":"2","CD":"1"} 
}; 

Więcej na CI Controllers

+0

wydaje mi się nieco ok do mnie –

Powiązane problemy