【问题标题】:Send JSON Object to PHP on AJAX Success在 AJAX 成功时将 JSON 对象发送到 PHP
【发布时间】: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)

数组结构:

$ 数据只有urlswords,但它们可以有多个值。两者的基数不同。

然后我将其编码为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 的回答

使用答案解决了内容类型不一致。 但是我如何访问我的Viewhtml body 中的 AJAX 成功时收到的响应,其中有一大块用于以表格格式显示数据的 PHP 代码?

解决方案:

在下方查看我的answer

【问题讨论】:

  • 您的回复是什么类型的?它必须是 application/json (stackoverflow.com/a/477819/834309),否则 ajax 将无法正确解码它(从而做出响应 undefined)。如果它是正确的 mime 类型,您的响应将已经是 json-object。
  • @fragmentedreality 在 Firebug 下,在 GET displayData 的 Net 选项卡中,Response Headers 中的 Content-Typetext/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


【解决方案1】:

最后我放弃了JSON 方法。我在ControllerdisplayData 方法中添加了以下行:

$this->load->view('data_processing', $data);

data_processing.php 是一个新的View,它可以生成我想要显示的 HTML 表格。这个View 的响应是通过以下AJAX 请求加载到我原来的View 中的:

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

【讨论】:

  • 正如我在 cmets 中建议的那样:-D
  • @fragmentedreality 是的,这点亮了我心中的灯泡:P 在我的大多数问题中,我必须完全改变我的方法!
【解决方案2】:

添加

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

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

【讨论】:

  • 好的,可以。但是如何在同一页面的html body 中访问此响应?我必须将 AJAX 成功时收到的响应发送到我的html body 中的代码块。这是我的主要问题
  • 这取决于您的 HTML。请提供更多信息。您说您有一段代码可以处理您的响应。当您的客户端请求 AJAX 时,您不会将这些数据块返回给您的 PHP。因此,您可以决定在控制器中生成正确的 HTML 并将其作为响应发送(不是 AJAX 方法),或者用 javascript 编写一些东西来处理接收到的 json-object 并填写页面中的数据。跨度>
猜你喜欢
  • 1970-01-01
  • 2015-06-14
  • 2010-11-11
  • 2016-11-11
  • 1970-01-01
  • 2015-07-07
  • 2014-07-08
  • 2018-05-24
  • 2017-07-29
相关资源
最近更新 更多