$ .post () не работает в IE - PullRequest
0 голосов
/ 28 июля 2011

Я создал приложение fb. Я использую метод FB.ui apprequests, чтобы выбрать друзей, которым я отправляю сообщения и которые хотят опубликовать на стене. Это выглядит так.

<div id="fb-root"></div>
<script src="http://connect.facebook.net/pl_PL/all.js" type="text/javascript"></script>
<script type="text/javascript" >
FB.init({
    appId: myappID,
    status: true, // check login status
    cookie: true, // enable cookies to allow the server to access the session
    xfbml: true,  // parse XFBML
    channelUrl  : 'http://localhost:3435/Content/channel.html'
});

function invite(){  
FB.ui({ method: 'apprequests',
        message: 'You should learn more about this awesome game.',
        data: 'tracking information for the user'
      },
function (response) {

      if (response && response.request_ids) {
          len = response.request_ids.length; //# of reqs
          var i = 0;

          for (i = 0; i < len; i++) {
            user_req_id = response.request_ids[i];
            FB.api('/me/apprequests/?request_ids=' + toString(user_req_id),
                   function (response) {
                     $.post("http://localhost:3435/Home/PostToWall", 
                            { request_ids: response['data'][0]['from']['id'] },
                            function (data) { alert("Data Loaded: " + data); }
                           );
                    });
      }
    } else {
      //  alert('Post was not published.');
    }
  })
    };
</script> 

Как видите, я хочу сделать запрос к

[HttpPost, CanvasAuthorize(Permissions = "user_about_me,publish_stream,email")]
public ActionResult PostToWall(string request_ids)
{
   /* Post to Wall Logic */
   return View();   
}

Это прекрасно работает с Chrome и Firefox, но в IE действие не запускается.

Я подготовил небольшой образец javascript, который вы можете проверить. Вот тут-то и возникает проблема.

<script type="text/javascript" >
  function CallPostToWall() {
    $.post("http://localhost:3435/Home/PostToWall", 
           { request_ids: 100001968250722 }, 
           function (data) { alert("Data Loaded: " + data);}
          );
  };
</script>
<a href='#' onclick='CallPostToWall()'>Test Posting</a>

Когда это проверяется в FF и Chrome, предупреждение возвращает ожидаемые действия в формате HTML, как если бы был запрошен http://localhost:3435/Home/PostToWall?request_ids=100001968250722.

В IE с другой стороны. Я получаю что-то вроде:

<html><head><script type="text/javascript">
top.location = "http://www.facebook.com/dialog/oauth/?scope=user_about_me,publish_stream,email&state=eyJyIjoiaHR0cDovL2FwcHMuZmFjZWJvb2suY29tL2NoaW5jenlrd3Nvc2llL0hvbWUvUG9zdFRvV2FsbCJ9&client_id=248066421875572&redirect_uri=http://localhost:3435/facebookredirect.axd";
</script></head><body></body></html>

Я довольно потерян с этим.

Есть мысли?

С уважением, Simon

Ответы [ 2 ]

0 голосов
/ 06 августа 2011

Наконец-то!Я решил свою проблему из-за "той же политики происхождения" и просто поднял в IE !: Я просто изменил параметр URL с: 'http://mysite.com/api/' на ' / api/ ' и это работает !!!

надеюсь, это поможет некоторым из вас!

0 голосов
/ 03 августа 2011

Возможно, это просто обходной путь. Мне удалось заставить $ .post () запускать / возвращать правильное представление, удаляя атрибут атрибута CanvasAuthorize (...) из определения PostToWall

[HttpPost]
public ActionResult PostToWall(string request_ids)
{
   /* Post to Wall Logic */
   return View();   
}

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

...