2015-05-12 8 views
1

Я новичок в ajax, и я просто попробовал некоторые примеры ajax, но я продолжаю получать эту внутреннюю ошибку сервера. Я искал в Интернете решение, но ничего не работает. Однако, если я изменяю тип от POST до GET, он работает нормально.Ajax POST дает 500 Внутренняя ошибка сервера

контроллер:

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

class testingAjax extends CI_Controller 
{ 
    public function index() 
    { 
     $this->load->view('testingAjax_view'); 
    } 

    public function getSomething() 
    { 
     $values = $this->input->post('testing');   
    echo $values; 
    } 
} 

сценарий расслоение плотной

$(document).ready(
    function() 
    { 
     $('#callBackBtn').click(function() 
     { 
      jQuery.ajax({ 
       type: "POST", 
       url: "testingAjax/getSomething", 
       data: {testing: "testing"}, 
       success: function(data) { 
        $('#responseText').val(data); 
       }, 
       error: function(xhr, text_status, error_thrown){ 
        alert(error_thrown); 
       } 

      })    
     }); 
    } 
); 

вид

<body> 
    <h3>Testing Ajax</h3> 
    <div class="entry-wrapper"> 
     <input type="text" id="input_text"> 
     <input type="button" value="Ajax Call Back" id="callBackBtn"/> 
    </div> 
    <div class="response_wrapper"> 
     <textarea id="responseText"></textarea> 
    </div> 
</body> 

Я бегу это на xammp. Ниже приведены журналы ошибок Apache (не уверен, если они полезны или нет)

[Wed May 13 00:31:53.251642 2015] [core:notice] [pid 25716:tid 456] AH00094: Command line: 'c:\\xampp\\apache\\bin\\httpd.exe -d C:/xampp/apache' 
[Wed May 13 00:31:53.257646 2015] [mpm_winnt:notice] [pid 25716:tid 456] AH00418: Parent: Created child process 25724 
[Wed May 13 00:31:57.895294 2015] [ssl:warn] [pid 25724:tid 460] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name 
[Wed May 13 00:31:59.065692 2015] [ssl:warn] [pid 25724:tid 460] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name 
[Wed May 13 00:31:59.205786 2015] [mpm_winnt:notice] [pid 25724:tid 460] AH00354: Child: Starting 150 worker threads. 

Firebug показано сообщение об ошибке:

POST http://localhost/ias/testingAjax/getSomething  
500 Internal Server Error 
     30ms 
+0

У вас нет формы, и ваш AJAX ничего не отправляет на сервер. Форма –

+0

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

+0

Я внес некоторые изменения, и теперь у меня есть некоторые данные, которые отправляются на сервер, но они все еще не работают. – John

ответ

1

Попробуйте с

url:"/testingAjax/getSomething". 

Для АЯКС метода вызова по умолчанию является GET и вы не отправляли form или какое-либо значение на сервер, просто делая вызов ajax при нажатии кнопки, поэтому он может работать !!! когда вы изменили тип метода от POST к GET, но в первую очередь я думаю, вы должны исправить url

Method (default: 'GET')

Type: String The HTTP method to use for the

request (e.g. "POST", "GET", "PUT")

увидеть здесь http://api.jquery.com/jquery.ajax/

+0

PLZ объяснить, почему downvoted? –

+0

Я думаю, что человек проголосовал за то, что это функция класса контроллера, которую вы хотите вызвать через этот URL-адрес, который вообще невозможен таким образом. –

+0

Я использую firebug для отладки и кажется, что URL-адрес правильный. – John

1

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

Прежде всего, правильно настройте свой проект.

Сначала я создать файл .htaccess в корневой папке папки той же директории в index.php, чтобы создать довольно URL

Вот простой .htaccess файл содержимого

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule .* index.php/$0 [PT,L] 
</IfModule> 

И Вам необходимо включить mod_rewrite расширения/конфигурации вашего сервера

вы можете включить его, находя appache/httpd.conf

и найти ю e "LoadModule rewrite_module modules/mod_rewrite.so"

удалить # и сохранить и перезагрузить приложение.

Следующий шаг, чтобы включить URL Helper

на

приложения/Config/автозагрузку.php

$autoload['helper'] = array('url'); 

, чтобы использовать вспомогательный URL-адрес, созданный CI;

См URL HELPER

Далее следует контроллер настройки по умолчанию, чтобы сделать это приложение/Config/routes.php

$route['default_controller'] = 'testingAjax'; 

Контроллер testingAjax.php

<?php 

class testingAjax extends CI_Controller 
{ 
    public function index() 
    { 
     $this->load->view('testingAjax_view'); 
    } 

    public function getSomething() 
    { 
     $values = $this->input->post('testing');   
     echo $values; 
    } 
} 

Вид testingAjax_view. php

<html> 
    <head> 
     <script type="text/javascript"> 
      // get the base url of the project 
      var BASE_URL = "<?php echo base_url(); ?>"; 
     </script> 
    </head> 
<body> 
    <h3>Testing Ajax</h3> 

    <div class="entry-wrapper"> 
     <input type="text" id="input_text"> 
     <input type="button" value="Ajax Call Back" id="callBackBtn"/> 
    </div> 

    <div class="response_wrapper"> 
     <textarea id="responseText"></textarea> 
    </div> 

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 

    <script type="text/javascript"> 

     $(document).ready(function() { 

      $('#callBackBtn').on('click', function(){ 
       $.ajax({ 
        type: "POST", 
        url: BASE_URL + "testingAjax/getSomething", 
        data: {testing: $('#input_text').val()}, 
        success: function(data) { 
         $('#responseText').val(data); 
        }, 
        error: function(xhr, text_status, error_thrown){ 
         alert(error_thrown); 
        } 

       }); 

       // But if you cannot setup the pretty url 
       // using .htaccess 
       // then you can use the 
       // BASE_URL+ "index.php/" + "testingAjax/getSomething 
      }); 
     }); 

    </script> 

</body> 

</html> 
0

Просто поместите это в файл .htaccess, который находится в корневом каталоге:

Options +FollowSymLinks 
RewriteEngine on 
RewriteBase/
RewriteCond $1 !^(index\.php|resources|robots\.txt) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

Примечание:

RewriteBase / важно здесь.

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