Обратный вызов jQuery.get не запускается из ответа C # ASP.Net - PullRequest
0 голосов
/ 06 декабря 2009

У меня есть букмарклет, который при нажатии открывает всплывающее окно div на их текущей странице (например, www.cnn.com). У этого div есть кнопка, которая при нажатии делает запрос jQuery.get в мой домен приложения. Это все работает нормально, но я получаю сообщение об ошибке. Это функция, которая делает запрос

function postWishXML(){

  jQuery(".ServerResponse").ajaxError(function(event, XMLHttpRequest, ajaxOptions){
    //entering here
  });

  var Wish = wishObject();

  if(Wish == false)
  {
    jQuery('.ServerResponse').html('Please enter a gift title');
    jQuery('.GiftText').val('');
  }else
  {
    jQuery('.ServerResponse').html('');
    var WishXML = createXMLTags(Wish);

    jQuery.get(Root+'/apps/shop/toolbar/WishlistPopup.ashx',
       {'sap':Cookie,'wish':WishXML},
        Response,
       'text'
     );
  }

}

это код сервера

 public void ProcessRequest (HttpContext context) {


    if (SecurityContext.IsAuthenticated || SecurityContext.IsSemiAuthenticated)
    {

        if (!string.IsNullOrEmpty(context.Request["wish"]))
        {
            string res = "Your wish has been added";
            context.Response.ContentType = "text/plain";
            context.Response.Write(res);
            context.Response.End();

        }
    }

Моя проблема связана с междоменными сценариями или синтаксисом?

Спасибо

1 Ответ

2 голосов
/ 06 декабря 2009

Я думаю, ты прав. Похоже, вы столкнулись с ограничением межсайтовых скриптов.

Помните, вы вставляете свой код JavaScript в код целевого сайта. Таким образом, код работает с их страницы. Другими словами, вы пытаетесь сделать запрос AJAX со страницы (например, www.cnn.com) и получить данные с вашего сайта (другого домена).

Одно решение, которое я нашел в статье здесь . Это суть:

function loadScript(scriptURL) {
 var scriptElem = document.createElement('SCRIPT');
 scriptElem.setAttribute('language', 'JavaScript');
 scriptElem.setAttribute('src', scriptURL);
 document.body.appendChild(scriptElem);
}

loadScript(Root + '/apps/shop/toolbar/WishlistPopup.ashx');

Заставьте ваш серверный скрипт возвращать javascript, который будет оценен.

Второй, возможно, более предпочтительный вариант - использовать JSONP . По сути, ваш сервер будет отвечать данными JSON, обернутыми в именованную функцию. Вы сообщаете jQuery.ajax-запросу, что ожидаете ответа jsonp и каково будет имя возвращаемой функции. Это в значительной степени делает вышеперечисленное, но с немного большей безопасностью и синтаксическим сахаром, обернутым вокруг него.

Это будет версия PHP, но она должна быть понятной. Предположим, что все необходимые данные находятся в $ data, и имейте в виду, что вы можете поместить анонимные функции в структуру JSON, чтобы они были обработаны в обработчике успеха.

$json = json_encode($data);
echo $_GET['jsonp_callback'] . '(' . $json . ');';

JavaScript:

$.ajax({
  dataType: 'jsonp',
  jsonp: 'jsonp_callback',
  url: Root + '/apps/shop/toolbar/WishlistPopup.ashx',
  success: Response,
});

Чтобы правильно оценить, я украл и изменил этот пример JSONP из ответа Эндрю Мура для на этот вопрос

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