2013-03-18 2 views
0

Я пытаюсь использовать getJSON, чтобы я мог получить последнюю информацию из моей базы данных. То, что я сделал до сих пор, хранит его в массиве и json_encode(the array). Это работает, потому что я вижу информацию о представлении, но проблема в том, что метод ajax не подбирает его. Может быть, мне не хватает чего-то действительно глупого.Неисправность getJSON для работы с codeigniter

Контроллер:

public function insertJSON() 
{ 
    $this->load->model("values"); 
    $queryresults = $this->values->getDb(); 
    $arr = array(); 

    foreach($queryresults as $row) 
    { 
     $arr[] = $row->postcode; 
    } 

    $data['arr'] = $arr;  
    echo json_encode($arr); 
    $this->load->view('answer', $data); 

} 

Вид:

<html> 
<head> 
    <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
    <script> 
    <script>    
     $.post('/localhost/codeigniter/index.php/welcome/insertJSON', function(data) { 
      alert(data); 
     }); 
    </script> 
    </script> 
</head> 
<body> 
</body> 
</html> 

Var самосвала переменной $ обр:

array(4) { 
    [0]=> 
    string(5) "test1" 
    [1]=> 
    string(5) "test2." 
    [2]=> 
    string(5) "test3" 
    [3]=> 
    string(5) "test4" 
} 

ответ

1

Вы отправляете $data массив (который содержит $arr) к представлению, называя его ($this->load->view('answer', $data);) и просто прямо перед ней вы повторить данные в формате JSON.

Так что вы делаете это вызов, который сверху, перед тем, как любой HTML или Javascript имеет простой текст, содержащий json закодированный $arr.

Это, очевидно, неправильно, а не то, что вы ищете.

Вы должны сделать что-либо из этих вариантов:

  1. эхо $arr на вид, на <head> раздел внутри <script> тегов. Однако вам не пришлось бы использовать AJAX-вызов.
  2. просто откликните $arr на контроллере, но не вызывайте его после просмотра. Вы должны , вероятно, сделать для этого еще один контроллер. Один для эха $arr и один для вызова вида. Таким образом вы можете позвонить AJAX в первый контроллер .
  3. передайте $arr на представление, которое будет просто отражать JSON-кодированные данные. Это похоже на вариант № 2, но он использует представление для отображения данных , а не контроллера, что является наиболее подходящим способом отслеживания шаблона MVC. Контроллеры не должны ничего эха.

Предлагаю следовать опции № 3.

+0

я согласен, но я думаю, что он хочет его для какого-то живого обновления, используя ajax. – Zalaboza

+0

спасибо спортивный билли, но им нужен живое обновление так же, как указано в Momem. – Hashey100

+0

Тогда решение №3 - это то, что вы хотите. Он может быть реализован для вызовов AJAX, и обычно так вы должны следовать за вызовами AJAX, чтобы следовать шаблону MVC. –

0

Я предполагаю, что проблема является ваш пост URL:

$.post('//localhost/codeigniter/index.php/welcome/insertJSON', function(data) { 
    alert(data); 
}); 

вы пропустили двойной слэш (//)

+0

его отображение исходного кода в предупреждении по какой-то странной причине thanx – Hashey100

+0

вы показываете код «Вид» выше; это «ответ»? – egig

+0

да, это действительно меня смущает – Hashey100

1

So. если вы хотите отследить объект JSON, который может быть использован с помощью ajax, тогда вам нужно убедиться, что выходной тип mime вашей страницы может обслуживать данные JSON.

также обратите внимание, что вы не можете отследить все остальное с данными json, которые хотят получить из ур-функции. как я могу видеть в вашем коде u echo json, тогда загрузите представление!и нужно разделить, что на 2 отдельных страниц

Fix:

public function _JSON() 
{ 
    $this->load->model("values"); 
    $queryresults = $this->values->getDb(); 

    $arr = array(); 

    foreach($queryresults as $row) 
    { 
     $arr[] = $row->postcode; 
    } 

    return $arr; 

} 


public function json_body(){ 
    $this->load->view('answer',array('data'=>$this->_JSON())); 
} 


public function getJSON(){ 
    $this->output 
    ->set_content_type('application/json') 
    ->set_output(json_encode($this->_JSON())); 
} 
///note that $this->_JSON() now return ur $arr so u can use it in many methods. 

теперь загрузить страницу и можно перейти к /json_body «переименовать его как и хотите» и JS должен быть

<script> 
$.post('<?=base_url('welcome/getJSON')?>', function(data) { 
alert(data); 
}); 
</script> 
<!--notice that base_url show echo out ur url base on ur config.php file--> 

ПРИМЕЧАНИЕ:

Функция getJson использует мощность класса CI Output для установки типа mime-типа и убедитесь, что этот массив является единственным выходом. это не обязательная, а просто лучшая практика. если вы хотите, чтобы u мог перевести все 3 строки с простым echo json_encode($this->_JSON());, и он тоже будет работать!

+0

Большое спасибо за ответ, я получаю сообщение об ошибке Fatal error: Call to undefined method Welcome :: _ JSON() в C: \ xampp \ htdocs \ codeigniter \ application \ controllers \ welcome.php в строке 69 – Hashey100

+0

Whats on строка 69? – Zalaboza

+0

-> set_output (json_encode ($ this -> _ JSON())); – Hashey100

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