【问题标题】:How to get meta_key and its meta_value within wp_usermeta by ajax call (json format)如何通过ajax调用(json格式)在wp_usermeta中获取meta_key及其meta_value
【发布时间】:2015-07-06 06:00:45
【问题描述】:

在 Wordpress 中,我在我的主题编辑个人资料页面中创建了一些自定义字段,其中之一允许我输入用户地址。 此地址自动存储在表 wp_usermeta 下的 WordPress DB 中。 (自定义字段称为 user_address)。

从 wp_usermeta 中,名为 meta_key 的列具有值“user_address”。但我试图收集的内容是它的 meta_value 等价物。

截图:

这是我将数据转换为 JSON 格式的 php 代码:

...... 
$row=$db->prepare('select * from wp_usermeta'); 
......

foreach($row as $rec)//foreach loop  
   {  
     $json_array['meta_key']=$rec['meta_key'];
     array_push($json_data,$json_array); 
   }

来自 JS 文件:

request('file.php', function(data) {

  var data = JSON.parse(data.responseText);

  for (var i = 0; i < data.length; i++) {
       console.log(data[i].meta_key);
  }
........

我的问题在这里。从 data[i] 我需要获取所有 'user_address'(在 meta_key 内)和存储在 meta_value 中的等效值,如上面的截图所示,但不幸的是我不知道如何获取它。 我可以获取所有的 meta_key 值,但我不知道如何将 user_address 关联到 meta_value。

我试过了:

data[i].meta_key.user_address.meta_value
data[i].user_address.meta_value
data[i].meta_key[user_address].meta_value
data[i].meta_key['user_address'].meta_value

有什么建议吗? 谢谢

【问题讨论】:

  • 亲爱的,为了调试,将var data = {} 添加为全局。然后在该全局变量中收到数据时设置数据。最后,在 chrome 中,在控制台(Chrome/Firefox)中写入data。您将能够看到data 的真实情况。如果数据为 NULL,则使用 Simple JSON for PHP 伪造您的 JSON。

标签: php mysql ajax json wordpress


【解决方案1】:

好的,所以表中的user_address 不是键,而是meta_key 的值。从逻辑上思考,您的最终结果是您想要 meta_keymeta_value 具有 user_address 的值。

一种方法,将 php 中的 foreach 循环更改为:

foreach($row as $rec)
    {
        $json_array[$rec['meta_key']]=$rec['meta_value'];
        array_push($json_data,$json_array);
    }

现在,如果您转储该数组,它将如下所示:

array(
    ...
    [10] => array (
        'user_address' => '26 Aorile Costo'
    ),
    ...
)

您可以在 javascript 中使用 data[i].user_address 引用它

你也可以去掉array_push,只输出$json_array,这样你就不必在javascript中遍历数组,并且可以简单地引用它为data.user_address,因为数组转储现在将看起来像:

array(
    ...
    'user_address' => '26 Aorile Costo',
    ...
)

【讨论】:

  • 您好,Stretch,感谢您的回答。我添加了$json_array['user_address']=$rec['user_address'];(我需要离开$json_array['meta_key']=$rec['meta_key']吗?)....并用data[i].user_address替换了data[i]。但它说 NULL
  • 改变了我的答案,希望它更有意义
  • 确实有道理,但不幸的是现在我得到:SyntaxError: JSON.parse: unexpected end of data at line 3 column 1 of the JSON data var data = JSON.parse(data.responseText);跨度>
【解决方案2】:

我找到了解决办法。 改变自

$row=$db->prepare('select * from wp_usermeta');

$row=$db->prepare('select * from wp_usermeta where meta_key = "user_address"')

然后我变了:

$json_array['meta_key']=$rec['meta_key'];

$json_array['meta_value']=$rec['meta_value'];

data[i] 变成 data[i].meta_value

【讨论】:

  • 酷...但是我肯定会考虑不使用array_push,并将meta_key设置为数组键,将meta_value设置为值,这意味着您可以简单地将其引用为data.user_address (与其他元键相同)
  • 您之前提供的解决方案是给我 SyntaxError: JSON.parse。如果我没有收到该错误,我将很乐意使用您的解决方案。有什么想法吗? :)
  • 是的,我的第一个想法是你有一个 PHP 错误,这使得 JSON.parse 无法读取响应文本。你能自己运行php脚本,看看它是否输出任何错误......(它必须完全干净,只是打印的JSON数组)
  • 或者,正如@alexis 提到的,在 json.parse 之前做一个console.log(data.resonseText);,看看它的格式是否正确。
  • 控制台日志报空白..让我看看能不能加个截图..一秒@Stretch
猜你喜欢
  • 2016-01-22
  • 2023-04-04
  • 1970-01-01
  • 2016-03-22
  • 2018-02-16
  • 2019-11-06
  • 1970-01-01
  • 2017-10-03
  • 2018-01-22
相关资源
最近更新 更多