我刚开始使用PHP OOP并且目前正在使用Code Igniter框架。我在使用AJAX将数据发送到控制器时遇到了一些问题,所以我想出了一种最简单的方法来测试AJAX是否正常工作,这是无效的。
外部JS文件:
function confirm_add_user()
{
var name1 = $("#name").val();
var page = base_url+'User/test/';
$.ajax({
url: page,
type: 'POST',
data:{ nameA : name1},
success:function(data) {
alert("Pass");
},
error: function(){
alert("Fail");
}
});
}
控制器:
public function test()
{
$name = $this->input->post('nameA');
echo "Name: $name";
}
查看:
<button type="submit" class="btn btn-primary" id="submit" onclick="confirm_add_user()">Submit</button>
检查我已完成:
1. JQuery file is linked.
2. name1 or $("#name").val() gets the correct data from it's text input field.
3. Base_url is the correct url.
如果我错了,请纠正我,当右键单击提交按钮时,它应该提醒/弹出Pass
对话框。但是,我得到的是Fail
,如果ajax失败,我会指示警报。一直试图解决这个问题但是我还没有得出任何问题的结论,所以我来到stackoverflow寻求指导和帮助。有什么可能或可能是问题的任何帮助?
我的主要目标是能够在当前页面上加载视图(不确定它是否是正确的方式)但我还没有进展,因为我无法发送任何数据从我的表单输入字段到控制器函数。
编辑:
经过一段时间的尝试,我发现当我直接在视图中编写js时,特别是使用这些代码,它可以工作:
$(document).ready(function(){
$('#add_user_form').on('submit', function(form){
form.preventDefault();
$.post('<?php echo base_url();?>/index.php/User/add_this_user', $("#add_user_form").serialize(), function(data){
$('div.test').html('gaefwef');
});
});
});
然而,当我在外部js文件中使用它时,它并没有。我试过一个测试函数只是为了看看js文件是否通过使用警报正确链接,它确实存在问题仍然存在于ajax中。是因为表单的防止默认吗?我不太确定。现在仍在尝试。
答案 0 :(得分:0)
请检查您是否启用了csrf保护。如果您已启用csrf验证,则必须在post字段中传递CSRF令牌。
答案 1 :(得分:0)
删除按钮中的type='submit'
。它实际上以默认方式提交您的表单,因此使用type='button'
更新您的按钮标记,它将起作用
<button type="button" class="btn btn-primary" id="submit" onclick="confirm_add_user()">Submit</button>
和你的javascript ajax函数
更新此行
data:{"nameA":name1},
答案 2 :(得分:0)
试试:
function confirm_add_user()
{
var nameA = $("#name").val();
$.ajax({
url: "<?php echo base_url() ?>User/test/" +nameA,
type: 'POST',
data:{},
success:function() {
alert("Pass");
},
error: function(){
alert("Fail");
}
});
}
答案 3 :(得分:0)
我认为你创建数据json的错误使用下面的代码,json键必须是双引号才能收到帖子密钥
function confirm_add_user(){
var name1 = $("#name").val();
var page = base_url+'User/test/';
$.ajax({
url: page,
type: 'POST',
data:{ "nameA" : name1},
success:function(data) {
alert("Pass");
},
error: function(){
alert("Fail");
}
}); }
答案 4 :(得分:0)
如果您启用了CSRF保护,请尝试这样的操作。
function confirm_add_user(){
$.ajax({
url: '<?php echo base_url() ?>User/test',
type: 'post',
data: {
nameA: $('#name').val(),
<?php echo $this->security->get_csrf_token_name();?>: '<?php echo $this->security->get_csrf_hash();?>'
},
success: function (data) {
console.log(data);
},
error: function(xhr, desc, err){
console.log(err);
}
});
}
答案 5 :(得分:0)
我猜您要将数据发送为json
。 CodeIgniter不知道如何做到这一点,因此您需要以不同方式获取请求数据。
jQuery
做一些引人入胜的技巧并将您的数据转换为form-data-x
,这就是为什么它在您的第二次试用中有效。
解决方案是使用$this->input->raw_input_stream
来抓取您的JSON
并使用php
json_decode
对其进行解码。检查下面的完整答案和代码: