【问题标题】:Converting php json to javascript getJSON将 php json 转换为 javascript getJSON
【发布时间】:2015-07-12 21:48:30
【问题描述】:

你好 stackoverflow 社区,我为我对 javascript/ajax 的无知而道歉,但我很难将此 php json 转换为 javascript 函数

$json =    file_get_contents('http://videoapi.my.mail.ru/videos/mail/alex.costantin/_myvideo/4375.json');
$json_a = json_decode($json,true);
$url = $json_a[videos][0][url];
$img = $json_a[meta][poster];
echo $url;
echo $img;

提前感谢您提供的任何帮助

Var_dump Json

string(984) "{"version":3,"service":"mail","provider":"ugc","author":{"email":"alex.costantin@mail.ru","name":"alex.costantin","profile":"http://my.mail.ru/mail/alex.costantin"},"meta":{"title":"avg","externalId":"mail/alex.costantin/_myvideo/4375","itemId":4375,"accId":54048083,"poster":"http://videoapi.my.mail.ru/file/sc03/2500725436577747223","duration":7955,"url":"http://my.mail.ru/mail/alex.costantin/video/_myvideo/4375.html","timestamp":1430140403,"viewsCount":13345},"videos":[{"key":"360p","url":"http://cdn28.my.mail.ru/v/54048083.mp4?sign=dab566053f09db40a63a263f17190aeeb09f1d8d&slave[]=s%3Ahttp%3A%2F%2F127.0.0.1%3A5010%2F54048083-v.mp4&p=f&expire_at=1430773200&touch=1430140403","seekSchema":3},{"key":"720p","url":"http://cdn28.my.mail.ru/hv/54048083.mp4?sign=e9ea54e857ca590b171636efae1b80ccdf0bb5bf&slave[]=s%3Ahttp%3A%2F%2F127.0.0.1%3A5010%2F54048083-hv.mp4&p=f&expire_at=1430773200&touch=1430140403","seekSchema":3}],"encoding":true,"flags":16387,"spAccess":3,"region":"200"}" 

Var_dump Json_a

array(10) { ["version"]=> int(3) ["service"]=> string(4) "mail" ["provider"]=> string(3) "ugc" ["author"]=> array(3) { ["email"]=> string(22) "alex.costantin@mail.ru" ["name"]=> string(14) "alex.costantin" ["profile"]=> string(37) "http://my.mail.ru/mail/alex.costantin" } ["meta"]=> array(9) { ["title"]=> string(3) "avg" ["externalId"]=> string(33) "mail/alex.costantin/_myvideo/4375" ["itemId"]=> int(4375) ["accId"]=> int(54048083) ["poster"]=> string(56) "http://videoapi.my.mail.ru/file/sc03/2500725436577747223" ["duration"]=> int(7955) ["url"]=> string(62) "http://my.mail.ru/mail/alex.costantin/video/_myvideo/4375.html" ["timestamp"]=> int(1430140403) ["viewsCount"]=> int(13345) } ["videos"]=> array(2) { [0]=> array(3) { ["key"]=> string(4) "360p" ["url"]=> string(185) "http://cdn28.my.mail.ru/v/54048083.mp4?sign=dab566053f09db40a63a263f17190aeeb09f1d8d&slave[]=s%3Ahttp%3A%2F%2F127.0.0.1%3A5010%2F54048083-v.mp4&p=f&expire_at=1430773200&touch=1430140403" ["seekSchema"]=> int(3) } [1]=> array(3) { ["key"]=> string(4) "720p" ["url"]=> string(187) "http://cdn28.my.mail.ru/hv/54048083.mp4?sign=e9ea54e857ca590b171636efae1b80ccdf0bb5bf&slave[]=s%3Ahttp%3A%2F%2F127.0.0.1%3A5010%2F54048083-hv.mp4&p=f&expire_at=1430773200&touch=1430140403" ["seekSchema"]=> int(3) } } ["encoding"]=> bool(true) ["flags"]=> int(16387) ["spAccess"]=> int(3) ["region"]=> string(3) "200" } 

到目前为止我已经做到了,但没有成功,代码有什么问题?

$.ajax({ type: "GET", url: "http://videoapi.my.mail.ru/videos/mail/alex.costantin/_myvideo/4375.json", async: false, beforeSend: function(x) { if(x && x.overrideMimeType) { x.overrideMimeType("application/j-son;charset=UTF-8"); } }, dataType: "json", success: function(data){ alert(data.meta.poster); }});

【问题讨论】:

  • @Ghost 这个 json url 不支持回调,你能给我举个和我的 php json 代码类似的例子吗?
  • 然后只需制作一个获取它的 php 包装器,然后改为调用您的 PHP url
  • @Ghost 你能举个例子吗?我不明白,据我所知,您对 ajax 了解得很好,您能否让我成为 jsfiddle 上的工作示例?谢谢
  • 您能否将var_dump $json$json_a 变量发布并发布以供审核?

标签: javascript php jquery ajax json


【解决方案1】:

如果您无法通过 JSONP 获取它,您可以创建处理请求的 PHP 包装器,然后调用您的 PHP url 来获取它。

这是同一页面上的一个粗略示例(当然,如果您将 PHP 文件分开会更好)。

<?php

if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['json_call'])) {
    echo file_get_contents('http://videoapi.my.mail.ru/videos/mail/alex.costantin/_myvideo/4375.json');
    exit;
}

?>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script type="text/javascript">
$.ajax({
    url: document.URL,
    dataType: 'JSON',
    type: 'POST',
    data: {json_call : true},
    success: function(response) {
        alert(response.version);
        alert(response.videos[0].key);
    }
});
</script>

Sample Output

【讨论】:

  • @Ilie 肯定没有问题,很高兴这有帮助
  • @Ilie 如果你使用了$.getJSON,那么它当然行不通,发送一个GET 请求,我就是我的例子,我使用了POST
  • 我没有使用过 $.getJSON,我需要使用它,因为如果不是它从服务器端获取数据,我需要从客户端获取数据,就像这个是让看看 link
  • @Ilie 你没试过demo吗,应该是直接失败了,PHP获取外部JSON,然后你的客户端(JS)调用你的PHP
  • 我确实喜欢这样,但我需要使用 ajax/javascript 从客户端请求内容而不是让您的代码正常工作,我只需要从客户端从 url 中提取数据,您可以更改您的像这样工作的代码,而不是 file_get_contents 服务器端到 $.getJSON 客户端?
【解决方案2】:

我认为这正是您访问变量的方式,您需要在键周围使用引号

<?php
   $json = '{"version":3,"service":"mail","provider":"ugc","author":{"email":"alex.costantin@mail.ru","name":"alex.costantin","profile":"http://my.mail.ru/mail/alex.costantin"},"meta":{"title":"avg","externalId":"mail/alex.costantin/_myvideo/4375","itemId":4375,"accId":54048083,"poster":"http://videoapi.my.mail.ru/file/sc03/2500725436577747223","duration":7955,"url":"http://my.mail.ru/mail/alex.costantin/video/_myvideo/4375.html","timestamp":1430140403,"viewsCount":13345},"videos":[{"key":"360p","url":"http://cdn28.my.mail.ru/v/54048083.mp4?sign=dab566053f09db40a63a263f17190aeeb09f1d8d&slave[]=s%3Ahttp%3A%2F%2F127.0.0.1%3A5010%2F54048083-v.mp4&p=f&expire_at=1430773200&touch=1430140403","seekSchema":3},{"key":"720p","url":"http://cdn28.my.mail.ru/hv/54048083.mp4?sign=e9ea54e857ca590b171636efae1b80ccdf0bb5bf&slave[]=s%3Ahttp%3A%2F%2F127.0.0.1%3A5010%2F54048083-hv.mp4&p=f&expire_at=1430773200&touch=1430140403","seekSchema":3}],"encoding":true,"flags":16387,"spAccess":3,"region":"200"}';

  $json_a = json_decode($json,true);

  var_dump($json_a["meta"]["poster"]); 
  //string(56) "http://videoapi.my.mail.ru/file/sc03/2500725436577747223"
?>

用你的 php 设置一个 js 变量,你可以这样做:

<script>
    var poster = '<?php echo $json_a["meta"]["poster"]; ?>';
</script>

用你的 php 设置一个 js 对象,你可以这样做:

<script>
    var jsonString = '<? phpfile_get_contents('http://videoapi.my.mail.ru/videos/mail/alex.costantin/_myvideo/4375.json'); ?>';
    var jsonObj = JSON.parse(jsonString);
</script>

【讨论】:

  • 实际上,OP 想在 javascript 中处理这个 JSON
  • 在他们的示例中,问题不在 JS 中
  • 是的,引用需要在那里,但 OP 说:但我很难将此 php json 转换为 javascript 函数当然,您的答案将在 PHP 方面起作用,但 OP 希望在 JS 中处理值
【解决方案3】:

您可以使用Simple JSON for PHP 库来伪造您的复杂 JSON 并将多个 json 合并在一起而无需对其进行解码。

<?php

  include('../includes/json.php');

  // $json = new json(); // Pure JSON
  $json = new json('callback', 'myCallback'); // JSON with Callback

  $jsonOnly = file_get_contents('http://videoapi.my.mail.ru/videos/mail/alex.costantin/_myvideo/4375.json');

  $json->add('status', '200');

  if(connected){
    $json->add("alex.constantin", $jsonOnly, false);
    $json->add("authorized", true);
    // $json->add("authorized"); can also be used
  }
  else 
    $json->add("authorized", false);

  $json->send();
?>

在您的 HTML 中,您主要可以通过两种方式调用它:

旧版 JS 和 DOM 元素。

回调必须与以下内容“集成”:mycallback({ ... });

function load_script(url) {
  var s = document.createElement('script'); 
  s.src = url;
  document.body.appendChild(s);
}

function load_scripts() {
  load_script('myPhpPage');
}

window.onload=load_scripts;

Ajax 通过 Legacy JS 或 JQuery

回调应该是这样的:{} 并被这样调用:

$.getJSON('http://example.com/MyPHP.php',
data,
function(json) {
  alert(json);
});

【讨论】:

  • 每个客户端的内容都不同,基于 IP 地址,@Ghost 的答案很好,但我需要通过客户端使用$.getJSON 获取它
  • 然后,正如我刚才所说:使用$.getJSON$.ajax$.post$.get 发送数据(可能是唯一令牌)并检索响应。在您的 PHP 中,您只需添加一些条件,例如验证发送的令牌和仅在用户被授权时伪造 JSON。您可以通过Simple JSON for PHP 库添加任何对象、字符串、数组、数字、布尔值或 JSONString
  • 你能给我举个例子吗?我该怎么做?我真的是 ajax/javascript 的新手
  • 这不是在我们必须工作的 Javascript 中,而是在 PHP 部分。您无法决定是否使用 Javascript 进行连接,因为客户端可能会添加一些恶意数据。 JS可以由客户端修改。首先:创建您的 PHP 脚本,让您能够检查您是否已连接并发送令牌(存储在 SESSION var 和 COOKIE 中)
  • 我已经做了这个$.ajax({ type: "GET", url: "http://videoapi.my.mail.ru/videos/mail/alex.costantin/_myvideo/4375.json", async: false, beforeSend: function(x) { if(x &amp;amp;&amp;amp; x.overrideMimeType) { x.overrideMimeType("application/j-son;charset=UTF-8"); } }, dataType: "json", success: function(data){ alert(data.meta.poster); }}); 但不起作用,代码有什么问题?
猜你喜欢
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 2013-03-01
  • 2012-02-08
  • 2013-10-11
相关资源
最近更新 更多