所以,假设您正在尝试执行jquery ajax请求,例如:
$.ajax({
...
url: http://other-website.com
...
})
据我所知,由于同源原则,此请求将失败,因为该URL是外部域。
但是我听说GetJSON()
不遵守这个原则,可以使用JSONP和附加的URL向外部服务器发送异步获取请求。
我的问题是:是否可以使用GetJSON()
从外部名称中检索所有HTML作为JSON对象中的单个字符串?如果默认情况下没有这样做,我有什么方法可以强制/欺骗它吗?
答案 0 :(得分:3)
是的,您可以从远程位置请求html,但是您必须使用代理才能执行此操作。一个公开可用的代理是YQL。
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。
答案 1 :(得分:1)
答案是否定的,你不能欺骗它或强迫它从外部源加载html。 GetJSON仅适用于为JSONP提供服务的服务器,并且只能读取有效的JSON对象。
答案 2 :(得分:0)
您可以使用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"));
}
}