【问题标题】:Is there any way to use the JQuery GetJSON method to get HTML from an external page?有没有办法使用 JQuery GetJSON 方法从外部页面获取 HTML?
【发布时间】:2013-08-21 18:18:57
【问题描述】:

假设您正在尝试执行 jquery ajax 请求,例如:

$.ajax({
    ...
    url: http://other-website.com
    ...
})

我理解由于同源原则,这个请求会失败,因为该URL是一个外域。

但是我听说GetJSON() 不遵守这个原则,可以使用 JSONP 和附加的 URL 向外部服务器发送异步 get 请求。

我的问题是:是否可以使用 GetJSON() 从外部名称中检索所有 HTML 作为 JSON 对象中的单个字符串?如果默认情况下不这样做,有什么办法可以强制/诱骗它这样做吗?

【问题讨论】:

  • 这只适用于 JSONP,然后外部 URL 必须实际输出有效的 JSONP 而不是 HTML,否则你就完蛋了。
  • 是的,YQL 将允许您从外部域请求 html 作为 jsonp。但是请注意,您必须从返回的 jsonp 中提取 html。

标签: javascript jquery ajax json http


【解决方案1】:

是的,您可以从远程位置请求 html,但是您必须使用代理才能这样做。 YQL 是一种公开可用的代理。

http://jsfiddle.net/BKJWu/

var query = 'SELECT * FROM html WHERE url="http://mattgemmell.com/2008/12/08/what-have-you-tried/" and xpath="//h1" and class="entry-title"';
var url = "http://query.yahooapis.com/v1/public/yql?q=" + query + "&format=json&callback=??";


$.getJSON(url,function(data){
    alert(data.query.results.h1.content);
})

您当然可以在返回纯 html 而不是 json 的服务器上构建自己的。

【讨论】:

  • 漂亮,甚至不确定这是否可能。非常感谢。
  • 所以这对我来说在 JSFiddle 上工作得很好,但是由于某种原因,当我尝试在按钮单击事件中使用相同的代码时,它不合作。
  • 无论你把它放在哪里,这段代码都应该可以工作,如果它不工作怎么办?没有成功回调触发?
  • 是的。不触发成功回调。我尝试将其从事件处理程序中取出,然后将其放在 html 页面中的
  • 您是否包含了网址的&callback=?? 部分?和format=json?您可以从该网址安全更改的唯一内容是query
【解决方案2】:

答案是否定的,您不能欺骗或强制它从外部源加载 html。 GetJSON 仅适用于服务 JSONP 的服务器,并且只能读取有效的 JSON 对象。

【讨论】:

  • 当然可以,尽管它需要的不仅仅是客户端代码。
  • 是的,但他问的是GetJSON 方法,而不是其他解决方法。
  • 它仍然会使用 getgetJSON 方法,尽管你的观点是有效的。
【解决方案3】:

您可以使用 GetJSON 检索您有权访问的任何 JSON 对象。这是一个使用 Razor 和 MVC 控制器的示例。

jQuery 代码

$(function () {
            $.getJSON('@Url.Action("GetColorsJson", "Json")', function (jsonData) {
                var css = new customContentJs.css.apply(jsonData);
            });
        });

控制器代码

using System.Web.Mvc;
using DAL;
using Newtonsoft.Json;

    public class JsonController : Controller
    {
        private readonly CustomContentContext _db = new CustomContentContext();

        /// <summary>
        /// Return a json serialized object of user saved colors
        /// </summary>
        /// <returns></returns>
        public string GetColorsJson()
        {
            return JsonConvert.SerializeObject(_db.Site.Include("Colors"));
        }
    }

【讨论】:

  • 不,您不能从外部 URL 检索任何 JSON 对象
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
  • 2021-12-17
  • 1970-01-01
  • 2017-11-18
  • 2020-03-01
相关资源
最近更新 更多