Ajax POST给出500内部服务器错误

时间:2015-05-12 16:53:40

标签: php jquery ajax codeigniter

我是ajax的新手,我只是尝试了一些ajax的例子,但我不断收到这500个内部服务器错误。我在网上搜索解决方案,但似乎没有任何效果。但是,如果我将类型从POST更改为GET,则可以正常工作。

控制器:

<?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;
    }
}

js script

$(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

3 个答案:

答案 0 :(得分:1)

尝试

url:"/testingAjax/getSomething".

对于ajax调用,默认方法为GET并且您没有向服务器发布任何form或任何值,只需按下按钮即可调用ajax,这就是为什么它可能有效!当您将方法类型从POST更改为GET时,首先我认为您应该修复url

  

方法(默认:&#39; GET&#39;)

     

类型:String用于

的HTTP方法      

请求(例如&#34; POST&#34;,&#34; GET&#34;,&#34; PUT&#34;)

点击此处http://api.jquery.com/jquery.ajax/

答案 1 :(得分: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

来启用它

找到“LoadModule rewrite_module modules / mod_rewrite.so”

删除#并保存并重启你的appache。

下一步是启用URL帮助程序

on

应用/配置/ autoload.php

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

使用CI创建的url帮助器;

请参阅URL HELPER

接下来是设置默认控制器来执行此操作 应用/配置/ 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>

答案 2 :(得分: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 /在这里很重要。