将 JSON 对象从 PHP 传递到 JavaScript

passing json object from php to javascript

本文关键字:JavaScript PHP JSON 对象      更新时间:2023-09-26

在PHP中,我有一个这样的JSON对象(即使在这里也不确定它的格式是否正确以及我是否正确传递了它):

$someJSONObject = '{token:"randomtoken",signature:"signature"};

并在传递响应之前对其进行编码:

$response['code'] = 1;
$response['status'] = $api_response_code[ $response['code'] ]['HTTP Response'];
$response['data'] = $someJSONObject;
my_response($_GET['format'], $response);  //json_encode($response)

然后在我的 JS 中,我以这样的字符串格式接收它:

{ code:1,
  status:200,
  data: '"{token:''"randomtoken''", signature:''"signature''"}"' }

我将其解析为一个对象:

phpObj = JSON.parse(body);

所以我可以访问"数据":

dataObj = phpObj.data;

这给了我一个字符串的结果:

{token:'"randomtoken'", signature:'"signature'"}  //console.log(dataObj)

在这里,我迷失了方向,无法访问"令牌",获得了未定义的:

console.log('token: ' + dataObj.token)    //token:undefined  

意识到我试图在字符串中点,所以我在最后一步一定做错了什么。但是,即使我尝试使用JSON.parse或JSON.stringify,它似乎仍然没有帮助,并且给了我一个"未定义"。

dataObj = JSON.parse(phpObj.data);
console.log(typeof(dataObj);            //string
console.log(dataObj);                   //"'"{token:'''"randomtoken'''", signature:'''"signature'''"}'""
console.log(dataObj.token);             //token: undefined 

 dataObj = JSON.stringify(phpObj.data);
 console.log(typeof(dataObj));          //string
 console.log(dataObj);                  //"'"{token:'''"randomtoken'''", signature:'''"signature'''"}'""
 console.log(dataObj.token);            //token: undefined

任何帮助/反馈将不胜感激。

你不应该在 json 中嵌入 json。这是毫无意义的。处理纯原生数据结构,例如

$response = array(
   'code' => 1,
   'status' => xxx,
   'data' => array
         'token' => 'randomtoken',
         etc...
   )
);

然后对其进行编码:

echo json_encode($response);
JS

端会将其解码回本机JS结构,然后您只需

alert(response.data.token);

无需额外的解码步骤,无需担心转义引号等...

首先,这不是有效的 JSON:

 $someJSONObject = '{token:"randomtoken",signature:"signature"};

您需要将密钥括在 " 中。更好的是,让PHP来做:

$someJSONObject = json_encode(array(
    'token' => 'randomtoken',
    'signature' = 'signature'
));

然而,你正在做的真正奇怪的事情是试图在另一个 JSON 字符串中包含一串 JSON。委婉地说,这是令人困惑的。

相反,将数据作为数组传递给my_response,并让json_encode对整个批次进行编码。

$someJSONObject = array(
    'token' => 'randomtoken',
    'signature' = 'signature'
);
my_response($_GET['format'], $response);

在你的Javascript中,你应该能够做phpObj.data.token

我有一个类似的代码,但是,我的json看起来像这样

{ "token" [ "token": randomtoken, "signature": signature] }

然后我像这样操纵:

var datos = JSON.parse(JSON);      
    for(var something in datos){
      var objeto = datos[something];
      alert('token: ' + objeto.token);
    }

对不起,我的英语不好