Я не уверен, почему это не работает
js - он предупреждает о ширине, отправляет ее контроллеру, но он не будет предупреждать "сделано".
Сеть → Просмотр (проверка элемента Chrome) content: "<ul><li>50</li></ul>"
status: "ok"
$("#submit").click(function (e) {
e.preventDefault();
var width = $('#value').val();
$.ajax({
url: "http://domain.com/index.php/welcome/get_items",
data: {
width: width
}
}).done(function(data) {
$('div#cont').text(data);
}).fail(function() {
alert('Failed!')
});
});
контроллер
public function get_items()
{
$this->load->model('home_model');
$this->load->library('form_validation');
$this->form_validation->set_rules('width', 'Width', 'trim|required|xss_clean');
$width = $_GET['width'];
var_dump($width);
$one_exp = $this->home_model->one_exp($width);
var_dump($one_exp);
if($one_exp != false){
//$html = '<ul>';
foreach($one_exp as $exp) {
$html = $exp->width;
}
//$html .= '</ul>';
$result = array('status' => 'ok', 'content' => $html);
//header('Content-type: application/json');
echo json_encode($result);
exit();
}else{
$result = array('status' => 'no', 'content' => 'nothing here');
//header('Content-type: application/json');
echo json_encode($result);
exit();
}
}
home_model
function one_exp($width) {
$query_str = "SELECT * FROM files WHERE width=?";
$query = $this->db->query($query_str, array($width));
if($query->num_rows() > 0) {
foreach($query->result() as $item) {
$data[] = $item;
}
return $data;
} else {
return false;
}
}
Какую версию jQuery вы используете? Если вы используете более позднюю версию, ваш синтаксис может просто не работать. Вы также можете столкнуться с отказом Access-Control-Allow-Origin.
Тем не менее, попробуйте использовать jQuery 1.9.X или выше и используйте более подробный метод $.ajax
:
$(document).ready(function () {
$("#click").click(function () {
var width = $('#width').val();
alert(width);
$.ajax({
url: "http://mywebsite.com/index.php/welcome/get_items",
data: {
width: width
}
}).done(function (data) {
alert(data);
}).fail(function() {
alert('Failed!')
});
});
});
См. Здесь в действии, а также ошибка перекрестного происхождения отображается в журнале консоли: http://jsfiddle.net/remus/LcTe4/
Не забудьте удалить echo
указанное в ответе Ашока, и лучше всего добавить тип содержимого json:
header('Content-type: application/json');
echo json_encode($result);
в контоллере удалите эхо
public function get_items()
{
$this->load->model('home_model');
$width = $this->input->post('width');
$one_exp = $this->home_model->one_exp();
if ($one_exp != NULL)
{
$html = '<ul>'; //remove echo
foreach($one_exp as $exp)
{
$html .= '<li>';
$html .= $exp->width;
$html .= '</li>';
}
$html .= '</ul>';
$result = array('status' => 'ok', 'content' => $html);
echo json_encode($result);
exit();
}
else
{
$result = array('status' => 'no', 'content' => 'nothing here');
echo json_encode($result);
exit();
}
}
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
использую последнюю версию jquery