0

たとえば、次のような jquery ajax リクエストを実行しようとしているとします。

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

同一オリジンの原則により、URL が外部ドメインであるため、このリクエストは失敗することを理解しています。

GetJSON()ただし、はこの原則に従わず、JSONP と追加の URL を使用して外部サーバーに非同期の get 要求を送信できると聞いています。

私の質問はGetJSON()、外部名からすべての HTML を JSON オブジェクト内の単一の文字列として取得するために使用することは可能ですか? デフォルトでそうしない場合、強制/だましてそうさせる方法はありますか?

4

3 に答える 3

3

はい、リモートの場所から html をリクエストできますが、そのためにはプロキシを使用する必要があります。公開されているプロキシの 1 つに 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);
})

もちろん、json ではなくプレーンな html を返す独自のサーバーを構築することもできます。

于 2013-08-19T21:12:47.970 に答える
1

答えはノーです。それをだまして外部ソースから html をロードさせることはできません。GetJSON は、JSONP を提供するサーバーでのみ機能し、有効な JSON オブジェクトのみを読み取ることができます。

于 2013-08-19T20:43:48.343 に答える
0

GetJSON を使用して、アクセスできる任意の JSON オブジェクトを取得できます。これは、MVC コントローラーである Razor の例です。

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"));
        }
    }
于 2013-08-19T20:33:03.743 に答える