带CodeIgniter的Ajax - 服务器端未收到数据

时间:2015-02-06 18:50:39

标签: php jquery ajax codeigniter

我有以下AJAX:

$.ajax({
            type: "POST",
            url: base+"tree/plant/",
            data:{
                name: $('#field_treename').val(),
                summary: $('#field_summary').val(),
                description: $('#field_description').val(),
                address: $('#field_url').val(),
                category: $('#field_category').val()
            }
        })
        .done(function(resp){
            $('#plant-tree-inner').html(resp);
        });

base是我的基本网址,tree是控制器,plant是该控制器中的方法。

网址正确,控制器和方法到位,名称正确。我通过在plant方法中回显一个字符串来确保这一点,并且在AJAX响应之后它在客户端上正确显示。

但是,没有任何帖子数据似乎到达服务器。

echo $this->input->post('name');方法中执行plant会产生一个空字符串。执行var_dump($_POST)会得到一个空数组。我甚至尝试为plant方法提供参数,但这只会引发missing parameter错误。

那么数据丢失的原因在哪里?为什么?

编辑:我现在看到我的问题是错的。它与CodeIgniter无关,因为数据根本没有发送。根据Javascript,字段值为undefined,但它们肯定存在于HTML中:

<input type="text" id="field_treename" placeholder="Tree name" value="" />

4 个答案:

答案 0 :(得分:0)

似乎jQuery库出了问题。 为了测试,try发送请求以避免它。

答案 1 :(得分:0)

你也可以尝试一下..

$.ajax({
        type: "POST",
        url: base+"tree/plant/",
        data:{
            name: $('#field_treename').val(),
            summary: $('#field_summary').val(),
            description: $('#field_description').val(),
            address: $('#field_url').val(),
            category: $('#field_category').val()
        }
        success:function(resp){
        $('#plant-tree-inner').html(resp);
        }
});

答案 2 :(得分:0)

尝试在非常基本的方法中模拟问题,比如在localhost或server中创建另一个目录,并按照下面的描述创建文件。

index.php中的

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>POST Sending Problem</title>
    <script src="jquery-1.12.2.js"></script>
  </head>
  <body>
    <a href="#" onclick="test(12, 'http://localhost/your_test_dir/your_phpfile.php')">Link</a>
    <script src="custom_function.js"></script>
  </body>
</html>

创建例如test.js的js文件并将其作为测试

function test (id, base) {
  $.ajax({
    type: "POST",
    data: {
      'id': id
    },
    url: base,
    success: function(data) {
      alert(data);
    },
    error: function(data) {
      alert('no data');
    }
  });

}

接下来创建一个php文件your_phpfile.php

<?php
if (isset($_POST['id'])) {
  echo $_POST['id'];
} else {
  echo "no-result";
}
?>

这可以帮助您确定问题。如果这样可以正常工作,请尝试使用codeigniter应用它。

祝你好运

答案 3 :(得分:-2)

使用此人..

var request = "name="+$('#field_treename').val()+"&"
        request += "summary="+$('#field_summary').val()+"&"
        request += "description="+$('#field_description').val()+"&"
        request += "address="+$('#field_url').val()+"&"
        request += "category="+$('#field_category').val()

并设置为data=request。这应该有用。