【发布时间】:2013-02-06 16:08:57
【问题描述】:
在我的 Controller 中,我有一个数组 $data,其 var 转储如下:
array
'urls' =>
array
0 =>
array
'link_id' => string '1' (length=1)
'link_name' => string 'http://www.nytimes.com' (length=22)
'words' =>
array
0 =>
array
'keyword_id' => string '1' (length=1)
'keyword' => string 'republican' (length=10)
数组结构:
$ 数据只有urls 和words,但它们可以有多个值。两者的基数不同。
然后我将其编码为displayData 中的echo json_encode($data); 并将其发送到ajax。 displayData 不需要 POST 数据。 View中的ajax请求如下:
$.ajax({
url:"http://localhost/codeigniter/SiteController3/displayData",
success: function(response){
alert(response);
$("#user_data").html(response);
},
dataType:"json"
})
- 我想在我的“视图”中访问
response,这样我就可以 执行json_decode($response, true),得到关联数组。 - 有一段代码可以通过以下方式以表格格式呈现这些数据 在数组上循环。在这段代码之前,我想得到 关联数组。
- 我尝试使用
$.getJSON而不是$.ajax,但没有解决方案。还 尝试了$.each函数,但在警报中只得到undefined。做过JSON.stringify警告显示 JSON 但无法显示 将其发送到 PHP 代码。
编辑:
@fragmentedreality 的回答
使用答案解决了内容类型不一致。 但是我如何访问我的View 的html body 中的 AJAX 成功时收到的响应,其中有一大块用于以表格格式显示数据的 PHP 代码?
解决方案:
在下方查看我的answer。
【问题讨论】:
-
您的回复是什么类型的?它必须是
application/json(stackoverflow.com/a/477819/834309),否则 ajax 将无法正确解码它(从而做出响应undefined)。如果它是正确的 mime 类型,您的响应将已经是 json-object。 -
@fragmentedreality 在 Firebug 下,在
GET displayData的 Net 选项卡中,Response Headers中的Content-Type是text/html,在Request Headers中是application/json。为什么会这样?我正在控制器中执行 json_encode。 -
PHP 不会自动决定发送正确的 mime 类型。您可以配置您的网络服务器来执行此操作或手动设置预期的 MIME 类型。如果您访问以 .json 结尾的文件,我会让网络服务器完成这项工作。在您的情况下,只需从您的控制器发送标头(请参阅my answer)。
-
您无法在 PHP 中访问该数据。 AJAX 是客户端的。浏览器向您的控制器发出请求(通过 javascript)并获得响应作为回报。 PHP 在发送到客户端之前在服务器上处理。因此,您必须在成功回调中处理收到的响应。当然,您可以更改控制器以在 PHP 中生成正确的 HTML,并将其作为响应的一部分返回(例如
response.html)。
标签: php ajax json codeigniter associative-array