как изменить Request.JSON, чтобы удовлетворить междоменную безопасность - PullRequest
1 голос
/ 22 сентября 2011

Я использую mootools для запроса json от моего веб-обработчика, и это прекрасно работает с той же машины.В некоторых местах я читал о необходимости обратного вызова для решения проблем между доменами, но не знаю, как это применить.Я хотел бы запустить этот код из другого домена.

var input = [];

var jsonRequest = new Request.JSON({
    url: "http://www.mysite.com.au/GetImages.ashx?p=2",
    onSuccess: function (result) {

        for (var i = 0; i < result.length; i++) {
            // alert(result[i].MediaPath);
            var s = result[i].MediaPath.split('|');
            for (var j = 0; j < s.length; j++) {
                //        alert(s[j]);
                input.push(s[j]);
            }
        }


    }
}).get();

ура!

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Одним из решений является использование JSONP .

Вот код на стороне клиента, который вы бы использовали:

<script>
    function onSuccess(result) {

        for (var i = 0; i < result.length; i++) {
            // alert(result[i].MediaPath);
            var s = result[i].MediaPath.split('|');
            for (var j = 0; j < s.length; j++) {
                //        alert(s[j]);
                input.push(s[j]);
            }
        }
    }
</script>
<script src="http://www.mysite.com.au/GetImages.ashx?p=2&callback=onSuccess" ></script>
<!-- !!! Notice that the src now has a "callback" paramater which the client is passing to the server. -->

Вот что ответит сервер:

onSuccess(
    {
      'your':'json',
      'data':'here'
    }
)

Уловка, которая делает эту работу, состоит в том, что сервер больше технически не возвращает данные JSON. Вместо этого он вернет данные json, обернутые функцией javascript (которую определит код на стороне клиента), которая будет автоматически выполняться браузером, потому что это то, что браузеры делают с тегами.

Если вам нужно, чтобы он был собран динамически, тогда вы можете использовать код javascript для создания элемента сценария, добавить URL-адрес в качестве атрибута 'src', а затем добавить тег сценария в тело, чтобы браузер выполнял его. Этот хак является очень стандартным способом динамической загрузки скриптов. MooTools может уже может сделать это.

Недостаток моего предложения: он больше не асинхронный.

0 голосов
/ 22 сентября 2011

Другим потенциальным решением является предоставление вашему серверу-прокси запросов json с других сайтов. Я не знаю, как это можно сделать, но я думаю , что протокол SOAP реализует это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...