2013-05-04 2 views
1

У меня возникли проблемы с ajax и codeigniter. Я уже опубликовал еще один вопрос (link to question), и я решил, что решил, но я этого не сделал. Я прошу кого-то написать простой код с помощью ajax/codeigniter, который увеличит число внутри div/span при нажатии.Простой запрос Ajax/Codeigniter

I`m пытается последние несколько дней, чтобы сделать это, но постоянно получать настройки errors..My CI являются:
base_url: localhost/test/
индекс: index.php
автозагрузку: URL
по умолчанию контроллер: прием (I оставил его так просто для этого теста)

Я был бы более чем счастлив иметь простой пример для этого. Я тоже попробовал, но не повезло. Вот что я пытался на этот раз:

Controller (welcome.php)

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Welcome extends CI_Controller { 


function __construct() 
    { 
     parent::__construct(); 
    } 

public function index() 
{ 
    $this->load->view('welcome_message'); 
} 

function increase(){ 
    $increase = $this->input->post('increase'); 
    echo increase++; 
} 
} 

JS (Аякс)

function increase(){ 
var number = parseInt($('#number').html()) + 1; 
$.ajax({ 
     type: 'POST', 
     url: 'localhost/test/welcome/increase', 
     data: { increase:number }, 
     success:function(response){ 
      $('#number').html(response); 
     } 
}); 

} 

View (HTML/CSS)

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<script type="text/javascript"></script> 
<script type="text/javascript" src="<?php echo base_url();?>assets/js/jquery_v1.9.1.js"> </script> 
<script type="text/javascript" src="<?php echo base_url();?>assets/js/script.js">   </script> 
<style type="text/css"> 
#number { 
display: block; 
text-align: center; 
width: 100px; 
height: 30px; 
margin: auto auto; 
line-height: 30px; 
border: 1px solid #999999; 
border-radius: 5px; 
} 

</style> 
</head> 
<body> 
    <span id="number" onclick="increase()">0</span> 
</body> 
</html> 

I» m, используя последние xampp на окнах 7. Ошибка, которую я получаю, когда я нажимаю на span - POST http://localhost/test/localhost/test/welcome/increase 404 (Not Found)

+0

Не используйте «починки» тег, если вы не говорите о протоколе FIX. –

+0

хорошо, приятно знать. – mihajloWR

ответ

0

использование site_url() из CodeIgniter

function increase(){ 
    var number = parseInt($('#number').html()) + 1; 
    $.ajax({ 
    type: 'POST', 
    url: '<?php echo site_url("welcome/increase")?>', 
    data: { increse:number }, //<--- here should be increase 
    success:function(response){ 
     $('#number').html(response); 
    } 
    }); 

}

однако, добавив http:// перед локального хоста должен работать

url: 'http://localhost/test/welcome/increase', 

, но это всегда лучше, и рекомендуется использовать site_url(), если вы звоните контроллер в CI ... так что это не даст вам ошибок, когда вы загрузите его на живой сервер.

+0

это site_url или base_url? Я думаю, что это base_url .. error Я получаю: POST http: // localhost/test /% 3C? Php% 20echo% 20base_url (% 22welcome/Increase% 22)?% 3E 403 (Forbidden) – mihajloWR

+0

'base_url()' возвращает то же, что и site_url, без добавления index_page или url_suffix. – bipen

+0

Теперь я получаю эту ошибку (если я помещаю полный путь): POST http: // localhost/test/welcome/increse 404 (не найдено) – mihajloWR

0

В вашем ajax, не используйте внешнюю ссылку для JS, просто используйте внутреннюю.

Убедитесь, что вы установили $ конфиг [ «base_url»] = http://localhost/test/ в config.php

function increase(){ 
    var number = parseInt($('#number').html()) + 1; 
    $.ajax({ 
     type: 'POST', 
     url: '<?php echo base_url()?>welcome/increase', 
     data: { increase:number }, 
     success:function(response){ 
      $('#number').html(response); 
     } 
    }); 

} 
0
<!DOCTYPE html> 
<html lang="en"> 
<head> 
<script type="text/javascript"></script> 
<script type="text/javascript" src="<?php echo base_url();?>assets/js/jquery_v1.9.1.js"> </script> 
<script type="text/javascript" src="<?php echo base_url();?>assets/js/script.js">   </script> 
<style type="text/css"> 
    #number { 
    display: block; 
    text-align: center; 
    width: 100px; 
    height: 30px; 
    margin: auto auto; 
    line-height: 30px; 
    border: 1px solid #999999; 
    border-radius: 5px; 
    } 

</style> 
</head> 
<script> 
function increase(){ 
    var number = parseInt($('#number').html()) + 1; 
    $.ajax({ 
     type: 'POST', 
     url: '<?php echo base_url()?>welcome/increase', 
     data: { increase:number }, 
     success:function(response){ 
     $('#number').html(response); 
     } 
    }); 

} 
</script> 
<body> 
<span id="number" onclick="increase()">0</span> 
</body> 
</html> 
1

Вы должны представить маркер CSRF из печенья в противном случае запрос будет недействительным, если вы включить CSRF в config.php.

Вы можете использовать этот plugin для извлечения файлов cookie в javascript. И просто передайте его в CI.

ci_token

и

ci_cookie

ключи могут быть различными и могут быть найдены в config.php

Я хотел бы также предложить создание маршрут для Запрос и использование

SITE_URL()

над

base_url()

var SITE = "<?php echo site_url();?>" // GLOBAL variable so your javascripts can be external 

-

var data = { 'ci_token' : $.cookies.get('ci_cookie'), 'increase' : parseInt(number)} 
$.ajax({ 
    url : SITE + "/link/to/controller/method", 
    data : data, 
}); 
+0

Нет, я не должен делать ничего из этого. Все, что мне нужно было сделать, - это полный путь в ajax url. Я считаю, что у него что-то есть с xampp. – mihajloWR

0

Сначала вы должны определить свой сайт base_url в файле application/config, а затем использовать этот base_url с помощью вашего вызова страницы ajax, с которого идет ваш звонок. Пусть ваш base_url является http://localhost/test/

function increase(){ 
    var number = parseInt($('#number').html()) + 1; 
    $.post('<?php echo base_url()?>welcome/increase',{number :number},function(response){ 
      $('#number').html(response); 
    });  
} 

затем изменить увеличение функции в контроллере, как этот

function increase(){ 
    $increase = $_POST['number']; 
echo increase++; 

}

-1
View::::::  
<!DOCTYPE html> 
<html lang="en"> 
<head> 
<script type="text/javascript" src="<?php echo base_url();?>css/jquery.js"> </script> 
<style type="text/css"> 
#number { 
display: block; 
text-align: center; 
width: 100px; 
height: 30px; 
margin: 50px auto; 
line-height: 30px; 
border: 1px solid #999; 
border-radius: 5px; 
} 
body{ 
cursor: default; 
} 
</style> 
</head> 
<script> 
function increase(){ 
var number = parseInt($('#number').html()); 
$.ajax({ 
    type: 'POST', 
    url: '<?php echo base_url()?>main/samp_data', 
    data: { increase:number }, 
    success:function(response){ 
    $('#number').html(response); 
    } 
    }); 
} 
</script> 
<body> 
<span id="number" onclick="increase()">0</span> 
</body> 
</html> 




Controller:::::: 
<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Main extends CI_Controller { 

    public function index(){ 
     $this -> load -> view('sample_view'); 
    } 

    public function samp_data(){ 
     $increase = $this->input->post('increase'); 
     echo ++$increase; 
    } 
} 
0

попробовать это:

function increase(){ 
     var number = parseInt($('#number').html()) + 1; 
     $.ajax({ 
      type: 'POST', 
      url: 'localhost/test/Welcome/increase/', 
      data: "increase=" + number, 
      dataType: "text", 
      success:function(response){ 
       $('#number').html(response); 
      } 
     }); 

} 
0

Если вы используете этот Аякс в файле .php, чем вы должны сделать что-то подобное для вашего URL:

function increase(){ 
var number = parseInt($('#number').html()) + 1; 
var base_url = "<?php echo base_url();?>"; 
$.ajax({ 
    type: 'POST', 
    url: base_url+'welcome/increase', 
    data: { increase:number }, 
    success:function(response){ 
     $('#number').html(response); 
    } 
    }); 
} 

ИЛИ если вы делаете это в .js файла, чем нужно, чтобы добавить этот линия внутри вашей голова тега

<script> var base_url = "<?php echo base_url();?>";</script> 

И чем использовать это:

function increase(){ 
var number = parseInt($('#number').html()) + 1; 
$.ajax({ 
    type: 'POST', 
    url: base_url+'welcome/increase', 
    data: { increase:number }, 
    success:function(response){ 
     $('#number').html(response); 
    } 
    }); 
} 

Надеется, что это решает проблему. Тем не менее, это всегда хорошая идея при разработке в локальной среде, чтобы установить base_url в config.php, как это:

$root = "http://".$_SERVER['HTTP_HOST']; 
$root .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']); 
$config['base_url'] = $root;