AJAX成功时向PHP发送JSON对象

AJAX成功时向PHP发送JSON对象,php,ajax,json,codeigniter,associative-array,Php,Ajax,Json,Codeigniter,Associative Array,在我的控制器中有一个数组$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 =>

在我的
控制器中
有一个数组
$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)
$.ajax({
    url:"http://localhost/codeigniter/SiteController3/displayData",
    success: function(response){
        alert(response);
        $("#user_data").html(response);
    },
    dataType:"json"
})
阵列结构: $data将仅具有
url
单词
,但它们可以具有多个值。两者的基数不同

然后我将其编码为
echo json\u encode($data)displayData
中编码>并将其发送到ajax<代码>显示数据不需要POST数据。在
视图中发出的ajax请求如下所示:

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)
$.ajax({
    url:"http://localhost/codeigniter/SiteController3/displayData",
    success: function(response){
        alert(response);
        $("#user_data").html(response);
    },
    dataType:"json"
})
  • 我想访问我的“视图”中的
    响应
    ,以便 执行
    json\u解码($response,true)
    并获取关联数组
  • 有一段代码通过以下方式以表格格式呈现此数据: 在数组上循环。在这个代码之前,我想得到 关联数组
  • 我尝试使用
    $.getJSON
    而不是
    $.ajax
    ,但没有解决方案。阿尔索 已尝试
    $。每个
    功能,但处于警报状态时,仅获取未定义的
    。做
    JSON.stringify
    在警报状态下显示JSON,但无法 将其发送到PHP代码
编辑:

@碎片现实的答案 内容类型不一致的问题可以使用答案解决但是我怎样才能在我的
视图的
html body
中访问AJAX成功后收到的响应,该视图有一块PHP代码用于以表格格式显示数据?

解决方案: 请在下面查看我的帐户。

添加

header('content-type: application/json');

到您的控制器(在
echo
之前),为应用程序的响应设置正确的mime类型。

最后,我放弃了
JSON
方法。我在
控制器的
displayData
方法中添加了以下行:

$this->load->view('data_processing', $data);
php是一个新的
视图
,它生成了我想要显示的HTML表。此
视图的响应通过以下AJAX请求加载到我的原始
视图中:

$.ajax
({
    url: "http://localhost/codeigniter/SiteController3/displayData",
}).done(function(data)
    {
         console.log(data);
         $('#user_data').html(data); 
    }

你的回答是什么类型的?它必须是
application/json
(),否则ajax将无法正确解码它(从而使响应
未定义
)。如果它是正确的mime类型,您的响应将已经由json对象生成。@fragmentedreality在Firebug下,在
GET displayData
的Net选项卡中,
response Headers
中的
内容类型是
text/html
,在
请求头中是
application/json
。为什么会这样?我正在控制器中执行json_编码。PHP不会自动决定发送正确的mime类型。您可以将Web服务器配置为这样做,或者手动设置预期的mime类型。如果您访问以.json结尾的文件,我会让Web服务器完成这项工作。在您的情况下,只需从控制器发送标题(请参阅)。您无法在PHP中访问该数据。AJAX是客户端的。浏览器向控制器发出请求(通过javascript)并获得响应。PHP在发送到客户端之前在服务器上进行处理。因此,您必须在成功回调中处理收到的响应。当然,您可以更改控制器以在PHP中生成正确的HTML,并将其作为响应的一部分返回(例如,
response.HTML
)。但是如何在同一页面的
html正文
中访问此响应?我必须将AJAX成功时收到的响应发送到
html正文中的代码块
。这是我的主要问题。这取决于你的HTML。请提供更多信息。你说你有一段代码,处理你的反应。由于AJAX是从您的客户机请求的,所以您不会将这段数据返回到PHP。因此,您可以决定在控制器中指定适当的HTML,并将其作为响应发送(不太像AJAX方法),或者用javascript编写一些内容来处理接收到的json对象并在页面中填充数据。正如我在评论中所建议的:-D@fragmentedreality对这点亮了我心中的灯泡:P在我的大多数问题上,我必须完全改变我的方法!