【问题标题】:Ajax in Codeigniter doesn't work for a specific controller in remote hostCodeigniter 中的 Ajax 不适用于远程主机中的特定控制器
【发布时间】:2013-01-27 18:02:07
【问题描述】:

我的 Web 应用程序向远程服务器中的 Codeigniter-php 代码发出 Ajax 请求。它适用于本地主机,但不适用于远程主机中的特定控制器。这很奇怪,因为两个控制器都在 localhost 中工作。 请求:

$.ajax({
    async:true,
    type: "POST",
    dataType: "json",  
    url:"/CI/site/index.php/contact/submitContact",
    data: "", //data example 
    success:arrived,
    error:problems }); 

function arrived(data){
    var dataJson = eval(data);                       
}
function problems(){            
    $("#result").text('Problems.');     
}

我用log_message检查到货。使用下一个功能可以正常工作:

  function submitContact(){
     log_message('error', 'submitContact. ');
    //If data are received
    if($_POST){
            log_message('error', 'data. [application/controllers/contact.php]');
        }   
    }

但是,如果我将请求更改为url:"/CI/site/index.php/control/controlHome",则没有任何日志消息,输出如下: POST http://www.page.com/CI/site/index.php/control/controlHome 500 (Internal Server Error)

函数/application/controllers/control.php是下一个:

 function controlHome(){
    log_message('error', 'controlHome. [application/controllers/control.php]');
    //If data are received
    if($_POST){
         log_message('error', 'data. [application/controllers/control.php]');
    }   
 }

我也试过在 ajax 代码中使用完整的 url,但结果是一样的。需要什么设置吗?

【问题讨论】:

  • 您将 csrf 保护设置为 true 吗?这就是 Ajax 的问题。
  • 我已将 csrf 保护设置为 true,但我得到了同样的错误
  • 尝试使用 csrf false 进行测试。当直接从浏览器“/CI/site/index.php/contact/submitContact”打开时,你会得到同样的 500 错误?
  • 是的。同样的错误。我尝试用真假进行测试。那么就不是Ajax问题了。不是吗?
  • 没错,不是 Ajax 问题。 Control.PHP 以 开头

标签: javascript ajax codeigniter jquery codeigniter-2


【解决方案1】:

用codeigniter 2检查这个AJAX csrf保护。这解决了我同样的问题

http://aymsystems.com/ajax-csrf-protection-codeigniter-20

更新: 我在我的测试服务器上检查了你的 control.php 文件。

if($_POST) { /* i only commented gangway library functions  */
} else { /* only replace the load->view with an print_r $data; and its work */ }

并在构建时对舷梯库进行评论。并且 control/controlHome 正常工作,没有任何错误。检查导致错误 500 的舷梯库。

【讨论】:

  • 我开始认为问题出在主机上。现在,以前工作的 ajax 请求不起作用。我将与托管服务提供商交谈
  • 打开$config['csrf_protection'] = FALSE;并在浏览器中打开名为控制器的ajax,如果您收到内部服务器错误500代码有问题,但如果您无法收到错误,则ajax中的问题称呼。或尝试与托管服务提供商联系。
  • 我已经解决了,问题出在舷梯库使用的另一个库代码中。谢谢你的时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 2012-06-19
  • 2012-09-23
  • 2017-05-01
相关资源
最近更新 更多