让getJSON与codeigniter一起工作时遇到麻烦
Trouble getting getJSON to work with codeigniter
我试图使用getJSON,这样我就可以从我的数据库中获取最新的信息。到目前为止,我所做的是将它存储到一个数组和json_encode(the array)
中。这是有效的,因为我可以看到视图上的信息,但问题是ajax方法没有接收它。也许我错过了一些非常愚蠢的东西。
控制器:
public function insertJSON()
{
$this->load->model("values");
$queryresults = $this->values->getDb();
$arr = array();
foreach($queryresults as $row)
{
$arr[] = $row->postcode;
}
$data['arr'] = $arr;
echo json_encode($arr);
$this->load->view('answer', $data);
}
视图:
<html>
<head>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script>
<script>
$.post('/localhost/codeigniter/index.php/welcome/insertJSON', function(data) {
alert(data);
});
</script>
</script>
</head>
<body>
</body>
</html>
Var $arr变量的转储:
array(4) {
[0]=>
string(5) "test1"
[1]=>
string(5) "test2."
[2]=>
string(5) "test3"
[3]=>
string(5) "test4"
}
您正在发送$data
数组(其中包含$arr
)到视图通过调用它($this->load->view('answer', $data);
),就在它之前你回显JSON数据。
所以你要做的是调用一个视图,在它的顶部,在任何html或javascript有一个纯文本包含json编码的$arr
。
这显然是错误的,而不是你想要的。
你应该做以下两个选择之一:
- 回显
$arr
在视图,<head
>区段内的<script>
标签。不过,您不必使用AJAX调用。 - 只是回显
$arr
在控制器上,但在它之后不调用视图。你应该可能会为此制作另一个控制器。一个响应$arr
和一个调用视图。这样就可以对第一个对象进行AJAX调用控制器。 - 将
$arr
传递给一个视图,该视图将只返回JSON编码的数据。这类似于选项#2,但它使用View来显示数据而不是控制器,这是遵循MVC模式的最合适的方式。控制器不应该回显任何内容。
所以。如果您想要回显一个可以使用ajax拾取的JSON对象,那么您需要确保页面的输出mime类型可以提供JSON数据。
还要注意,你不能用json数据回显你想从函数中取出的任何其他内容。正如我可以看到在你的代码u echo json然后加载一个视图!你需要把它分成两个单独的页面
修复:
public function _JSON()
{
$this->load->model("values");
$queryresults = $this->values->getDb();
$arr = array();
foreach($queryresults as $row)
{
$arr[] = $row->postcode;
}
return $arr;
}
public function json_body(){
$this->load->view('answer',array('data'=>$this->_JSON()));
}
public function getJSON(){
$this->output
->set_content_type('application/json')
->set_output(json_encode($this->_JSON()));
}
///note that $this->_JSON() now return ur $arr so u can use it in many methods.
现在加载页面,你可以去/json_body
'重命名为你想要的'js应该是
<script>
$.post('<?=base_url('welcome/getJSON')?>', function(data) {
alert(data);
});
</script>
<!--notice that base_url show echo out ur url base on ur config.php file-->
注意:
function getJson get使用CI Output类的功能来设置页面的mime类型,并确保该数组是唯一的输出。这不是必须的,但它只是最佳实践。如果你想,你可以用简单的echo json_encode($this->_JSON());
替换所有3行,它也会工作!
我猜问题出在你的帖子URL:
$.post('//localhost/codeigniter/index.php/welcome/insertJSON', function(data) {
alert(data);
});
您错过了双斜杠(//)
相关文章:
- 使用JavaScript获取Google地图上显示的所有推文时遇到麻烦
- 在 Javascript 中添加数字时遇到麻烦
- 使用 Coffeescript 和 Express .js 将变量传递给 Jade 时遇到麻烦
- 编写正确的 jQuery 插件时遇到麻烦
- 在三.js中更改纹理时遇到麻烦
- 从 javascript 中的函数返回时遇到麻烦
- 理解 $.ajax() 参数以获取 PHP 变量时遇到麻烦
- 比较数组时遇到麻烦
- 使 JavaScript 函数工作时遇到麻烦
- 在Firefox和IE中获取CSS属性时遇到麻烦
- 将 Blueimp Gallery 与 HTML 和 Bootstrap 集成时遇到麻烦
- 将jQuery导入WordPress时遇到麻烦
- 在解决来自 coderbyte 的 JavaScript 编码挑战时遇到麻烦
- 从页面抓取时遇到麻烦
- 让jQuery在Wordpress中工作时遇到麻烦
- 在codeigniter框架中添加css和js文件时遇到麻烦
- 处理由dayClick返回的日期时遇到麻烦
- 在使用jQuery更改依赖于滚动位置的类时遇到麻烦
- 在使用javascript加速滚动动画时遇到麻烦
- 在跨域jquery/Ajax服务调用中遇到麻烦