【问题标题】:How to get JSON string from URL with Javascript?如何使用 Javascript 从 URL 获取 JSON 字符串?
【发布时间】:2015-09-21 01:22:24
【问题描述】:

我正在尝试从 URL 获取 JSON 字符串:

http://megarkarsa.com/gpsjson.php

URL 回显 JSON 位置值以字符串形式显示,例如:

{"BMS":[{"id":"PR01","type":"prajurit","lat":"-6.253310","long":"107.156219"},{"id":"PR02","type":"prajurit","lat":"-6.224084","long":"106.653069"},{"id":"PR03","type":"kendaraan","lat":"-6.244316","long":"106.649734"}]}

我需要从 javascript 中获取这个字符串,所以我可以稍后用 JSON.parse(string) 解析它。

我尝试使用getJson,但似乎无法完成,因为它不是真正的Json值,而是字符串。

我该怎么做?我们将不胜感激每一个建议。

【问题讨论】:

  • JSON.stringify($yourJSONhere);
  • @aldrin27 这里的主要问题与您的建议相反。因为JSON对象已经是字符串形式了,我需要得到那个字符串,所以我可以稍后解析它。
  • 然后在使用$.each();后使用$.parseJSON($jsonObj);

标签: javascript php json


【解决方案1】:

为什么不只是 jQuery?

$.get('http://megarkarsa.com/gpsjson.php',function(data){
    console.log(data);
},'json');

或使用php:

<?php
$json=file_get_contents('http://megarkarsa.com/gpsjson.php');
$json=json_decode($json,true);
?>

如果您已经完成所有操作但仍然无法正常工作,请尝试:

$.get('http://megarkarsa.com/gpsjson.php',function(data){
    data = eval ("(" + data + ")");
    console.log(data);
});

最后一个解决方案很危险,如果您信任您使用的 API,请使用它

【讨论】:

  • 感谢您的回答,我试过了,但没有显示任何结果。 $.get({}, 'json')$.getJson({}) 一样吗?
  • +1,php file_get_contents 负责获取字符串,它是json_encode 而不是json_decode。但是,如果我使用 php,我需要将值从 php 传递到 javascript,并且由于某种原因,我无法做到这一点(对工作有点困惑)。或者,你能给我一个解释,所以我可以将值从 php 传递给 javascript(来自不同的文件)?谢谢
  • 为什么不能将 php 传递给 javascript ? @splim92
  • 原因很简单,因为我之前有点不走运,我找到的每一个解释,都让我很困惑。但是我之前已经发现了。要从json_encode 传递值,我只需要生成javascript 全局变量并在php 代码之后使用echo $json 提供它。我说的对吗?
  • +1,非常感谢。这两个 jquery get 函数只能在同一个域或具有给定权限的情况下工作。我更喜欢 php file_get_contents。再次感谢您。
【解决方案2】:

正如 Michael Antonio 所指出的,使用 Ajax 将是实现这一目标的方法。这是我的代码

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JSON</title>
    <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
    <script>
    $(function() {
        $.ajax({
            url: 'http://megarkarsa.com/gpsjson.php',
            type: 'GET',
            dataType: 'html',
            success: function(data, status, xhr)
            {
                $("#json").html(data);
            },
            error: function(xhr, status, error)
            {
                $("#json").html("Error: " + status + " " + error);
            }
        });
    });
    </script>
</head>
<body>
    <div id="json"></div>
</body>
</html>

但是,错误不断出现。这是请求/响应标头,请注意响应是强制关闭连接。

请求

Host: megarkarsa.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
Accept: text/html, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://testsites.kalebklein.com/json1/json.html
Origin: http://testsites.kalebklein.com
Connection: keep-alive

回应

Connection: close
Content-Type: text/html
Date: Mon, 21 Sep 2015 01:52:56 GMT
Server: Apache
Transfer-Encoding: chunked
x-powered-by: PHP/5.4.36

还要注意响应的内容类型是 HTML,如果您希望使用我提供的上述 Ajax 函数解析 JSON,则应该是 JSON。返回的错误没有任何帮助,这意味着通过进行 Ajax 调用,连接被切断或拒绝,并且没有数据被发回。

【讨论】:

  • +1,感谢您的出色工作和解释。是的,我试过了,很明显,这是因为跨域预防。这意味着,您只能在与 json 文件相同的域中执行 GET 函数。我说的对吗?
  • 就是这样。如果您可以访问服务器,这很容易解决,并且您可以通过简单的 .htaccess 文件允许外部访问
  • 谢谢。对不起,如果我问你太多,但你能指出任何关于如何设置 .htaccess 权限的解释链接吗?谢谢
  • 我实际上有一个 .htaccess 可以让我在我的服务器上执行此操作,将其添加到您网站根目录中的 .htaccess 文件Header set Access-Control-Allow-Origin "*"
  • 注意!我会补充一点。非常感谢你!你救了我的命。
【解决方案3】:

你也可以这样做:

str='{"BMS":[{"id":"PR01","type":"prajurit","lat":"-6.253310","long":"107.156219"},{"id":"PR02","type":"prajurit","lat":"-6.224084","long":"106.653069"},{"id":"PR03","type":"kendaraan","lat":"-6.244316","long":"106.649734"}]}'; //example string
obj=jQuery.parseJSON( (str)); //parse as json
$.each(obj, function (i, item) { //loop through each item in main obj
     $.each(item, function (i, y) { loop through each prop in item
         alert(y.id) //you can access the values like this others can be accessed via the dot notation such as y. prajurit
     });
});

【讨论】:

  • 感谢您的回答,但我现在的主要问题是如何从我之前提到的 URL 中获取字符串 {"BMS":[{"id":...}]}。如何从 URL 中获取字符串?
  • Michael 解决方案是相关的,如果您可以访问该 url 的源代码,因为它不允许通过 ajax 访问。如果它不是您的源代码,那么您可以在服务器端获取内容
猜你喜欢
  • 2011-07-30
  • 2017-04-27
  • 2016-03-19
  • 1970-01-01
  • 2012-04-09
  • 2012-02-11
  • 2020-03-22
  • 2018-11-16
相关资源
最近更新 更多