2010-01-12 3 views
1

У меня есть ситуация, когда я вызываю Facebook.showPermissionDialog ('offline_access' ...), а затем я делаю вызов ajax.post. Вызов ajax.post завершается с ошибкой, если вызов диалога разрешения был сделан ранее. Но это удается, когда диалог разрешения не был вызван ранее. Кто-нибудь знает о какой-либо связи между этим диалогом и ajax.post?Facebook Ajax.post не удается после вызова Facebook.showPermissionDialog

Если вы хотите, чтобы устранить проблему из первых рук, посетите мое приложение по адресу http://apps.facebook.com/rails_dev (ЭТО ЗАЯВЛЕНИЕ НА FACEBOOK, ТАК ВЫ ДОЛЖНЫ ПРЕДОСТАВИТЬ ДОСТУП К ВАШЕМУ ПРОФИЛЬУ).

Вот код, который вызывает Facebook.showPermissionDialog():

<?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; 
?>[ 

Вот код, который вызывает FBJS ajax.post:

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; 

ответ

0

Я had the same problem если ajax.requireLogin параметр был true. Поскольку вы уже запрашиваете расширенные разрешения, вы можете установить его на false. Ниже приведен код ниже для меня:

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; 
}); 
Смежные вопросы