Как я могу использовать getResponseHeader из метода публикации в методе получения?

Я работаю с SkyScanner API, чтобы получить актуальные цены по данным о рейсах.

Как говорится в документации. Я создал сессию службы ценообразования в реальном времени. Который можно создать с помощью почтового запроса к API, а затем предоставить SessionKey, используя этот SessionKey и apiKey, я могу получить данные. Я вижу sessionKey с getResponseHeader("Location"), который я использую в методе успеха. И я отправляю его в глобальную переменную urlSession, которую я использую позже в другом HTTP-запросе на получение в качестве 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);
};

person Ayoub Salhi    schedule 25.08.2016    source источник


Ответы (1)


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

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

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

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

person charly3pins    schedule 28.08.2016
comment
Спасибо за Ваш ответ. Мне удалось получить sessionKey с помощью hrpost.getResponseHeader('Location') без добавления apiKey. Проблема с моим кодом заключалась в порядке вызовов, которые я выполнял, я установил почтовый http-запрос на ложный асинхронный. И я сделал запрос на получение внутри метода onload почтового запроса. Я смог решить проблему с этой архитектурой. - person Ayoub Salhi; 30.08.2016