0

Я работаю с SkyScanner API, чтобы получить данные о прямых ценах по рейсу.Как я могу использовать getResponseHeader из метода post в методе get?

Как говорится в документации. Я создал сеанс службы ценообразования. Который может быть создан после запроса на api, а затем он предоставляет SessionKey, используя этот SessionKey и apiKey, я могу извлечь данные. Я могу увидеть sessionKey с getResponseHeader («Местоположение»), который я использую в методе успеха. И я отправляю его в глобальную переменную urlSession, которую я использую позже в другом запросе http get в качестве URL-адреса. Я вижу SessionKey в предупреждении, но у меня есть неопределенная ошибка, когда я пытаюсь использовать его в методе get. Я не уверен, что это проблема CORS или просто синтаксис.

var hrpost = Ti.Network.createHTTPClient(); 
// post_params 
    var post_params = { 
     "apiKey" : {apiKey}, 
     "Country" : "US", 
    "Currency" : "USD", 
    "Locale" : "en-GB", 
    "Adults" : 1, 
    "Children" : 0, 
    "Infants" : 0, 
    "OriginPlace" : "16216", 
    "DestinationPlace" : "1111", 
    "OutboundDate" : "2016-09-23", 
    "InboundDate" : "2016-09-30", 
    "LocationSchema" : "Default", 
    "CabinClass" : "Economy", 
    "GroupPricing" : true 

    }; 
    var strMyObj = JSON.stringify(post_params); 
    //Here I set the webservice address and method 
hrpost.open('POST', "http://partners.api.skyscanner.net/apiservices/pricing/v1.0"); 
//Set the headers 
    hrpost.setRequestHeader("Accept", "application/json"); 
hrpost.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
hrpost.send(post_params); 

hrpost.onload = function(){ 

    alert('Posted successfully'); 
    urlsessionKey = hrpost.getResponseHeader('Location'); 
    alert(urlsessionKey); 

} 
hrpost.onerror = function() { 
alert('request didnt posted'); 
var rejection = { 
      status: hrpost.status, 
      statusText: hrpost.statusText, 


     }; 
     alert(rejection); 
}; 



//HTTP request get method to send the sessionKey and retrieve data 
var xmlHttp = Ti.Network.createHTTPClient(); 



var post_params = { 
     "apiKey" : {apiKey}, 
     "Country" : "US", 
    "Currency" : "USD", 
    "Locale" : "en-GB", 
    "Adults" : 1, 
    "Children" : 0, 
    "Infants" : 0, 
    "OriginPlace" : "16216", 
    "DestinationPlace" : "1111", 
    "OutboundDate" : "2016-09-23", 
    "InboundDate" : "2016-09-30", 
    "LocationSchema" : "Default", 
    "CabinClass" : "Economy", 
    "GroupPricing" : true 

    }; 
//here the error occurs when I use the sessionKey I stored in the global var urlsessionKey 
xmlHttp.open('GET', urlsessionKey); 

    xmlHttp.setRequestHeader("Accept", "application/json"); 
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 


xmlHttp.send(post_params); 

xmlHttp.onload = function(e){ 

    alert('Get successfully'); 
} 
xmlHttp.onerror = function() { 
alert('request didnt posted'); 
var rejection = { 
      status: xmlHttp.status, 
      statusText: xmlHttp.statusText, 

     }; 
     alert(rejection); 
}; 

ответ

0

Я думаю, может быть ошибка, потому что вы не используете ключ API вашего звонка при опросе сеанса, как это says в документации. Попробуйте так:

var urlsessionKey = hrpost.getResponseHeader('Location') + "?apiKey=" + {apiKey}; 

В любом случае в FAQ of Skyscanner кажется, что рейсы Живите службу ценообразованию не позволяет CORS версии, так что, возможно, вы должны сделать этот вызов с вашей стороны сервера. Несколько дней назад я опубликовал свой example in Java первого звонка, если он вам полезен.

Надеюсь, это поможет!

+0

Спасибо за ваш ответ. Я смог вытащить sessionKey с hrpost.getResponseHeader («Местоположение»), не добавляя apiKey. Проблема с моим кодом заключалась в порядке вызовов, которые я делал, я установил post http-запрос для ложной асинхронности. И я получил запрос на получение запроса в методе onload почтового запроса. Я смог решить проблему с этой архитектурой. –

 Смежные вопросы

  • Нет связанных вопросов^_^