【问题标题】:jQuery JSON not passing data to Ci properlyjQuery JSON 未正确将数据传递给 Ci
【发布时间】:2012-01-28 16:15:41
【问题描述】:

据我所知,下面的脚本有效:

<script type="text/javascript" language="javascript">
$(document).ready(function() {
    $('#add').bind('keypress', function(e) {
        if(e.keyCode == 13){
            var add = $("#add").val();
            $.ajax({
                type: "POST",
                dataType: "JSON",
                url: "<?php echo site_url("home/jsonAddData"); ?>",
                data: add,
                json: {title_posted: true},
                success: function(data){
                    if(data.title_posted == true) { // true means data was successfully posted.
                        $("#success").append("Success").fadeIn(400);
                    } else if(data.title_posted == false) { // false means data failed to post.
                        $("#success").append('Failure').fadeIn(400);
                    }
               }
          });
       }
    });
});
</script>

我在使用下面的代码时遇到的问题是 mysql 插入查询无法正常工作。它在表中创建行并自动递增,但由于某些奇怪的原因,它不会将上面 Javascript 中的“var add”传递给下面的 Ci 脚本并在数据库中执行插入。有什么想法或想法吗?

<?php
class home extends CI_Controller {
    function __construct() {
        parent::__construct();
    }
    function index() {
        $data = array();
        $data['lists'] = $this->displayList();
        $this->load->view('home', $data);
    }
    function displayList() {
        $str = '';
        $query = $this->db->query("SELECT * FROM data");
        foreach ($query->result() as $row) {
            $b = '<input name="completed" type="checkbox" />';
            $a = $row->title . "<br>";
            $str .= $b.$a;
        }
        return $str;
    }
    function jsonAddData() {
        if($this->input->is_ajax_request()) {
        $title = $this->input->post('title');
        $query = $this->db->query("INSERT INTO data (title) VALUES ('$title')");
        header('Content-type:application/json');
        if($query) echo json_encode(array('title_posted' => true));
        else echo json_encode(array('title_posted' => false));
        }
    }
}
?>

【问题讨论】:

  • 此脚本中存在 HTML 注入(跨站点脚本)和 SQL 注入(数据库入侵)安全漏洞。对您输出到页面 htmlspecialchars($row-&gt;title) 的所有数据进行 HTML 编码,并使用参数化查询来避免这种情况。

标签: php javascript jquery mysql codeigniter


【解决方案1】:

$.ajax({
...
data: {title: add}

不仅仅是一个字符串

【讨论】:

  • 好吧...所以我需要将它作为 JSON 元素传递?它虽然有效......谢谢男人!
  • @MichaelGrigsby 您没有传递“JSON 元素”-Javascript 中没有这样的东西,无论如何,您没有将 JSON 发送到服务器-您正在传递一个对象,这将是转换为 URL 编码的查询字符串,以便可以在 POST 请求中使用。如果你想传递一个字符串,你需要做data: 'title='+escapeURIComponent(add)。您应该阅读$.ajax manual page 并了解HTTP POST 请求。
  • 我的错,哈哈,自从我使用 Javascript 以来已经有几个月了。我还在学习它。这就是 JSON 使用的格式……所以它只是一个对象?而且我知道 POST 和 GET 请求......自 2009 年以来我一直在使用 PHP。
  • @MichaelGrigsby JSON 是 Javascript 对象文字语法的子集 - 例如,您传递给 $.ajax() 的唯一参数是对象文字,包装在 {} 中。当该对象的data 属性是矢量类型(object)时,它会被转换为 URL 编码的字符串,就像 HTML 表单提交一样——毕竟,这就是您在请求中模仿的内容.当它是 stringnumber 之类的标量类型时,它会转换为字符串并按字面发送。
猜你喜欢
  • 1970-01-01
  • 2020-09-19
  • 2011-11-13
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
相关资源
最近更新 更多