2011-05-02 60 views
2

编辑:使用.htaccess删除'index.php'创建了我刚发现的这个probem。现在我正在解决它。无法访问我的Post值通过jQuery发送ajax

编辑:问题解决了。 javascript是错误的:url: "/login/"它需要一个尾部斜线。

ORIGINAL:在我家的看法,我创建了一个表格:

<div id="login"><?php 
echo form_open('login'); 
echo form_input('username', 'Username', 'id="username"'); 
echo form_submit('submit', 'Login', 'id="login_submit"'); 
echo form_close(); 
?></div> 

有了一些基本的JavaScript(感谢NETTUTS)我试图执行一些Ajax:

$('#login_submit').click(function() { 

var form_data = { 
    username: $('#username').val(), 
    password: $('#password').val()  
}; 

$.ajax({ 
    url: "/login", 
    type: 'POST', 
    data: form_data, 
    success: function(msg) { 
     $('#login').html(msg); 
    } 
}); 

return false; 
}); 

正如你可以看到,它将表单值发送到登录控制器。

class Login extends CI_Controller { 

function index() 
{ 
    if($this->input->is_ajax_request()) 
    { 
     echo '<h2>Login succeeded with ajax</h2>'; 
    } 
    else 
    { 
     echo '<p>But your ajax failed miserably</p>'; 
    } 
} 

} 

问题是,它不起作用。函数$this->input->is_ajax_request()输出FALSE。忽略这一点,其他所有帖子数据都会丢失。 什么都没有通过。

我在做什么错?

+0

是您的jQuery的单击处理'$(文件)。就绪(...'包裹? – karim79 2011-05-02 08:35:44

回答

2

我认为你的问题可能是你实际上没有发送到正确的脚本。您的网址/登录信息看起来不像Codeigniter网址(http://domain.com/index.php/login或http://domain.com/my_app/index.php/login)。

尝试将url更改为控制器的完整url位置或正确的绝对路径。或者:

url: "http://yourdomain.com/index.php/login", 

url: "/my_app/index.php/login", 

除非你重写的URL,然后/登录可能不会接触到正确的脚本。

+0

我编辑的代码这个脚本确实有效,控制器和它的index()方法确实被调用了,回显出来的东西实际上会替换div的内容,这是后面的数据没有通过。:( – Kriem 2011-05-02 08:59:08

+0

你可以console.log ()form_data发送它之前,确保数据是你期望的?还要确保你包装jQuery在$(document).ready(function(){// jQuery否则jQuery将无法正确获取输入字段的值。 – Dormouse 2011-05-02 09:03:58

+0

我添加了文件准备功能。 Firebug说:对象{用户名=“用户名”,密码=“密码”}似乎后数据设置正确。 – Kriem 2011-05-02 09:09:33

0

这使我在正确的方向,当我使用PHP和JQuery的AJAX发送后值。我正在使用.htaccess重写URL以删除.php扩展名。 Post值没有传递给我的sendmail.php文件。我解决了这个改变后请求的URL从

$.ajax({ 
          url:'sendemail.php', 
          method:'post', 
          data:{ 
           fname:fname, 
          }, 
          success:function (e) { 
           alert(e); 
          } 
         }); 

url:'/sendmail'