【问题标题】:Passing JSON from server-side (.NET) to client-side (jQuery)将 JSON 从服务器端 (.NET) 传递到客户端 (jQuery)
【发布时间】:2016-03-16 05:22:57
【问题描述】:

我正在尝试从以下 URL 加载 JSON:

https://acs.leagueoflegends.com/v1/stats/game/TRLH3/1001090170/timeline?gameHash=a23ccbe7928a63a3

我的代码如下所示:

   var baseUrl = "https://acs.leagueoflegends.com/v1/stats/game/TRLH3/1001440043/timeline?gameHash=4725b07311676885";
   var json = $.getJSON(baseUrl, function(data){
    });
    $("#output").text(JSON.stringify(json));

我的输出是这样的:

{"readyState":1}

Jsfiddle:

https://jsfiddle.net/6Lwjpjmo/

编辑:显然,由于两个原因,无法从该 URL 检索 JSON:

  1. Access-Control-Allow-Origin:null
  2. 通过代理请求调用 JSON 以将 JSON 加载到正文中。

我已经可以通过 .NET 检索 JSON 服务器端,但需要将某些变量传递给客户端以在 jQuery 中进行操作。我该怎么办?

【问题讨论】:

  • 我不认为它是重复的...... JSONP是不同的......
  • @BasvanStein 这里没有 JSONP。是什么让您认为有 JSONP?
  • @PraveenKumar 因为它确实适用于callback.. 它只是给出了格式错误的 json,所以还有另一个问题。

标签: jquery .net


【解决方案1】:

你不需要那么难,服务器确实接受JSONP。只需将callback=? 参数添加到您的网址即可正常工作。

baseUrl = "https://acs.leagueoflegends.com/v1/stats/game/TRLH3/1001440043/timeline?gameHash=4725b07311676885&callback=?";

但是,您返回的“JSON”格式不正确

SyntaxError: Unexpected token ':'. Parse error. (anonymous function)timeline:1

编辑

看来服务器也不返回JSONP,使用代理服务可以让它工作:

var proxyUrl = 'https://jsonp.afeld.me/';
var serviceUrl = "https://acs.leagueoflegends.com/v1/stats/game/TRLH3/1001440043/timeline?gameHash=4725b07311676885";
var url = proxyUrl + '?url=' + encodeURIComponent(serviceUrl) + '&callback=?';

【讨论】:

  • 我之前尝试过使用JSONP 数据类型,但无济于事。用&callback=? 参数更新了小提琴,但仍然不起作用。
  • 没错,您的代码不起作用,但调用起作用。检查控制台..让我在一分钟内给你正确的代码。
  • @BasvanStein 当然...等待。 :)
  • 这很奇怪。它似乎在这里加载jsoneditoronline.org/?id=c40cabfeb194b26a813658f28e1707fe 就好了。我在 .NET 中使用这个 JSON 进行了编码,但试图在 jQuery 中完成同样的壮举
  • @TaylorM 他们使用代理请求/只是在他们的正文中获取 JSON。
【解决方案2】:

这是一个异步函数。此外,您只收到 XHR 对象。所以,把它放在函数里面:

var baseUrl = "https://acs.leagueoflegends.com/v1/stats/game/TRLH3/1001440043/timeline?gameHash=4725b07311676885";

$.getJSON(baseUrl, function(data) {
  json = JSON.parse(data);
  $("#output").text(JSON.stringify(json));
});

这应该可行。

您需要使用服务器端脚本,如代理 PHP 文件,读取内容并正确执行。

Proxy.php:

<?php
    header("Content-type: application/json");
    die(file_get_contents($_GET["url"]));
?>

然后这样称呼它:

url: "proxy.php?url=https://acs.leagueoflegends.com/v1/stats/game/TRLH3/1001440043/timeline?gameHash=4725b07311676885"

【讨论】:

  • @TaylorM 你不能。查看控制台:XMLHttpRequest cannot load https://acs.leagueoflegends.com/v1/stats/game/TRLH3/1001440043/timeline?gameHash=4725b07311676885. The 'Access-Control-Allow-Origin' header contains the invalid value 'null'. Origin 'https://fiddle.jshell.net' is therefore not allowed access. 它不允许对该 URL 的 AJAX 请求。
  • 来自服务器: Access-Control-Allow-Origin:null
  • 好的,谢谢。那么有没有办法将该页面中的html值加载到jQuery中?
  • @TaylorM 您可以使用代理脚本。让我更新答案。
  • @TaylorM 我一定会为你打电话的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
相关资源
最近更新 更多