AJAX вызов в жопу из букмарклета - PullRequest
1 голос
/ 28 января 2009

Я пытаюсь создать букмарклет, который будет начинать AJAX-вызов на страницу aspx, которую я написал.

Код отлично тестируется, когда я помещаю javascript на статическую html-страницу, но когда я пытаюсь вызвать его из букмарклета, код просто повиснет в xmlHttp.open («GET», url, true) часть.

Код букмарклета в основном такой (можно найти в нескольких примерах в Интернете):

javascript:(function(){
  var s,
  d=document,
  a=function(o){ d.body.appendChild(o) };
  s=d.createElement('script');
  s.type='text/javascript';
  s.src='http://localhost/squirt/sq.js';
  a(s)
})();

Это добавляет содержимое sq.js (вызов ajax + некоторая другая обработка) на любую страницу, на которой в данный момент находится браузер, а затем вызывает ajax на мою страницу aspx.

Я использую ASP 2.0 (с VS2008) и IIS 7. До сих пор я только что тестировал его в своей домашней сети.

Я предполагаю, что должна быть какая-то проблема с разрешениями при вызове ajax с внешней страницы, поскольку, как я уже сказал, все работает нормально со статической страницы. Это настройка IIS, которую мне нужно изменить, чтобы разрешить вызов, или я делаю что-то совершенно неправильно?

Ответы [ 3 ]

3 голосов
/ 28 января 2009

На объект XMLHttpRequest распространяется та же политика происхождения.
Вот почему скрипт, который загружает ваш букмарклет, не может использовать XHR для получения данных с вашего сервера, если он не встроен в страницу с вашего сервера.
Скрипт, добавленный путем динамического добавления тега скрипта, будет работать, как вы можете сказать - ваш букмарклет может загружать скрипт из другого источника.
Итак, вот ваш ответ. Не используйте объект XMLHttpRequest: динамически загружайте ваш скрипт так же, как это делает букмарклет.
Вот как работает JSONP (на самом деле есть еще кое-что для JSONP, но так оно и есть в SOP)

На самом деле, почему бы просто не использовать JSONP

0 голосов
/ 28 января 2009

Код, который вы используете там, довольно уродлив, я бы предложил использовать что-то вроде этого, что я построил:

Работает так:

getScript("http://anotherdomain.com/something", function(data) {
    alert(data); // the request is complete
});

На http://anotherdomain.com/something он должен будет возвращать что-то вроде этого, если вы используете PHP:

echo $_GET["jsonp"]."('Testing data, you can put anything in here');";

Обязательно прочитайте о JSONP .

0 голосов
/ 28 января 2009

Внедрение кода JavaScript на страницу по-прежнему вызывает те же проблемы с правами доступа, что и обычный код. Вы не можете сделать Ajax-вызов в другой домен. Так что, если вы звоните localhost с сайта example.com, это не сработает.

Возможно, вы захотите посмотреть, как JSON возвращается из вашего сервиса, и выполнять вызовы JSON с помощью тега script.

Эрик

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