Facebook Ajax.post Facebook.showPermissionDialog sonra arama başarısız

1 Cevap php

Ben bir ajax.post arama yapmak daha sonra Facebook.showPermissionDialog ('offline_access' ...) dediğimiz bir durum var. Izni iletişim için çağrı önce yapılmış olsaydı ajax.post çağrı başarısız olur. Ama izin iletişim öncesinde denilen değildi zaman başarılı olur. Bu iletişim ve ajax.post arasında bazı ilişkinin farkında mı?

Eğer ilk elden sorun kontrol etmek istiyorsanız, http://apps.facebook.com/rails_dev (BU BİR FACEBOOK APP IS SO sizin profilinize erişim izni vermesi gerekir) benim app ziyaret edin.

İşte Facebook.showPermissionDialog () çağıran kod:

<?php
  echo $this->jsInit($config);
  if(!$userNamespace->newGame) {
$log->debug('NOT new game, calling turnResume()');
    echo 'setVarBalance(' . $this->gamePlayerData['funds'] . ');'."\n";
    echo 'turnResume();'."\n";
  }
  echo $this->drawTrack($this->routeData, $this->trainData);
  echo $this->drawCityGoods($this->cityGoodsData);
  //$link = 'startSetCity()'; //$config->url->absolute->fb->canvas . '/turn/start-set-city';
  echo $this->drawCitiesAjax($this->cityDescData);
$log->debug('view: end start-select-city');

  if(!$facebook->api_client->users_hasAppPermission('offline_access', $this->fbUserId)):
?>
  var dialog = new Dialog().showMessage('Constant Authorization', 'Rails Across Europe is about to request \'Constant Authorization\' to your account. If you don\'t give us constant authorization, Facebook will eventually cause your game to timeout, thereby losing all game information. By granting this authorization, Facebook will not cause your game to timeout. This is the only reason we need this authorization.');
  dialog.onconfirm = function() {
    Facebook.showPermissionDialog('offline_access', null, false, null);
  }
<?php
  endif;
?>[

İşte ajax.post çağırır FBJS kodu:

    switch(state) {
      case START_SET_CITY:
//new Dialog().showMessage('test', 'START_SET_CITY');
//console.time('start_set_city');
        ajax.responseType = Ajax.JSON;
        ajax.ondone = function(data) {
//console.time('ondone');
//new Dialog().showMessage('in ajaxSetCity.ondone');
//new Dialog().showMessage('test', 'city=' + dump(data.city, 3) + '::: train=' + dump(data.train, 3));
          drawCityAjax(data.city, data.train);
          setVarBalance(data.funds);
          ajax.responseType = Ajax.JSON;
          ajax.post(baseURL + '/turn/start');
//console.timeEnd('ondone');
        };
        ajax.post(baseURL + '/turn/start-set-city', param); // <=== THIS IS THE AJAX CALL THAT FAILS
        var actionPrompt = document.getElementById('action-prompt');
        var innerHtml = '<span><div id="action-text">Build Track: Select a city where track building should begin</div>'+
                        '<div id="action-end">'+
                        '<input type="button" value="End Track Building" id="next-phase" onClick="moveTrainAuto();" />'+
                        '</div></span>';
        actionPrompt.setInnerXHTML(innerHtml);
        var btn = document.getElementById('next-phase');
        btn.addEventListener('click', moveTrainAutoEvent);
        state = TRACK_CITY_START;
//console.timeEnd('start_set_city');
        // get funds balance from backend and call setVarBalance()
        break;

1 Cevap

I-had the same problem halinde ajax.requireLogin parametre olduğu true. Zaten genişletilmiş izinleri soran beri false bunu ayarlayabilirsiniz. Aşağıdaki kod benim için çalışıyor:

Facebook.showPermissionDialog("publish_stream", function(permissions) {

    var form_data = form.serialize();

    var ajax = new Ajax();
    ajax.responseType = Ajax.RAW;
    ajax.requireLogin = false;
    ajax.ondone = function(data) {
        console.log("onerror")            
    };
    ajax.onerror = function() {            
        console.log("onerror")            
    };

    ajax.post("http://foo.example.com/submit", form_data);

    return false;
});