学习如何通过 CodeIgniter 使用 AJAX
Posted
技术标签:
【中文标题】学习如何通过 CodeIgniter 使用 AJAX【英文标题】:Learning how to use AJAX with CodeIgniter 【发布时间】:2010-09-23 09:51:23 【问题描述】:我觉得学习 javascript 这么难有点尴尬,但是..
假设我有一个非常简单的控制器:
class front extends Controller
public function __construct()
parent::Controller();
public function index()
//nothing!
public function test ()
$someNumber = $this->input->post('someNumber');
if ($someNumber == 12) return TRUE;
是的,这可能会写得更好,哈哈。
我想知道的是 - 我如何使用 JavaScript 在表单中提交一个数字(我稍后会担心验证和模型),我应该如何编写我的 test() 函数以便它返回一些可读的内容JavaScript(我假设 return TRUE 可能不起作用,可能是 XML 或 JSON 或类似的东西?),我如何使用 JavaScript 访问数据?
我知道有像 jQuery 这样的框架可以帮助解决这个问题,但现在我只想从最简单的层面理解它,到目前为止我发现的所有教程和指南对我来说都太深入了. jQuery 中的一个示例或其他任何好的示例。
非常感谢:)
【问题讨论】:
不用担心没有完美的身材 +1 我也觉得 JavaScript 有点挑战性,但你会通过大量练习来实现。 【参考方案1】:您基本上只需将其打印出来,然后通过 javascript 重新捕获该信息:
public function test()
$somenumber = $this->input->post('someNumber');
if ($somenumber == 12)
print "Number is 12";
else
print "Number is not 12";
您的 javascript 可能如下所示:
var xhr;
xhr = new XMLHTTPRequest();
xhr.onreadystatechange = function()
if (xhr.readyState == 4)
// this is where the return information is
alert('Status: '+xhr.status+' Response: '+xhr.responseText);
xhr.open('POST', '/front/test');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('someNumber=12');
上面的代码没有考虑浏览器特定的问题,但至少我相信应该在 firefox/ie7 上运行。
这是上面所有内容的 jQuery 示例:
var options =
'someNumber' : 12
$.post('/front/test', options, function(data)
alert(data); // should print "Number is 12"
);
【讨论】:
第一个带有 XMLHTTPRequest 的对我不起作用,并且由于 XMLHTTPRequest 未识别而给出错误....或某些东西。但是使用 Jquery 的第二个工作正常。非常感谢。【参考方案2】:我还在 CodeIgniter 中发现,当使用如上所述的标准 Javascript AJAX 调用时,响应标头中不会返回“XMLHTTPRequest”。
$this->input->is_ajax_request();
除非您使用 jQuery 处理 AJAX POST 请求,否则输入助手永远不会返回 true。
我也试过这篇文章的方法,还是不行:http://developer.practicalecommerce.com/articles/1810-The-Benefit-of-Putting-AJAX-and-CodeIgniter-php-Together
这是我最后用的:
var query_params = $('#data-form').serialize();
$.ajax(
type: 'POST',
url: 'process_this.php",
data: queryParams,
context: document.body,
success: function()
alert('complete'); // or whatever here
可能是由与我的 CI 安装有关的配置问题引起的,还没有时间调查。
【讨论】:
以上是关于学习如何通过 CodeIgniter 使用 AJAX的主要内容,如果未能解决你的问题,请参考以下文章
如何使用omnipay通过CodeIgniter实现在线支付?
如何使用 Codeigniter 通过 cc 发送多封电子邮件?
如何检查请求是不是通过 CodeIgniter 中的 AJAX 发出?