【问题标题】:Ajax call submit array to JavascriptAjax 调用提交数组到 Javascript
【发布时间】:2017-02-11 17:53:50
【问题描述】:

我有以下情况。

在一个 Javascript(函数 answer_submit)中,我通过 ajax 调用一个 php 文件,如下所示:

$.post("/content/insert_reply.php", {
  id: topicId,
  answerText: answerText,
  linkToShow: linkToShow
}, function(data) {
  call_next_function(data);
});

在调用的 php 文件中,我生成一个数组,该数组将在末尾打印:

$previewArrayString = "{url: '".$urlPreview["URL"].
"', pictureUrl: '".$urlPreview["Picture"].
"', title: '".$urlPreview["Title"].
"', description: '".substr($urlPreview["Description"], 0, 160).
"'}";
echo previewArrayString;

所以“call_next_function”函数将输入扩展为一个数组。每当我现在调用此函数时,它都会告诉我输入未定义。 我尝试将我需要的所有元素放入 javascript 中的全局数组中。但是当我在调用的 php 文件中执行此操作时,站点告诉我,该数组未定义。

长话短说,有什么方法可以让我在 php 中创建一个 javascript 数组,然后通过 js 函数中的数据部分检索数据?

【问题讨论】:

  • 你传递给'insert_reply.php'的是json数据。看看php的json_encode和json_decode
  • 你的 php 脚本不会创建一个数组而是一个 json-object。
  • call_next_function() 的输入最初是一个字符串,而不是一个数组/对象。您需要先将其转换为 JSON。
  • 使用json_encode 创建JSON

标签: javascript php arrays ajax


【解决方案1】:

除了别人建议使用json_encode,在php端设置Content-Type header:

header('Content-Type: application/json');
echo json_encode($urlPreview);

您也可以在 $.post 中添加一个参数来强制使用预期的响应类型,但是一旦您设置了 Content-Type,就不需要这样做了。无论如何,这就是你的做法:

$.post("/content/insert_reply.php", {
  id: topicId,
  answerText: answerText,
  linkToShow: linkToShow
}, function(data) {
  call_next_function(data);
}, "json");

【讨论】:

  • 感谢您的回答。它仍然显示我尝试使用的数组的所有内容都是未定义的。
  • 尝试在浏览器的javascript控制台中检查返回的数据;也许您的 php 代码回显的不仅仅是 json_encode。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 2014-09-06
相关资源
最近更新 更多