2016-10-26 2 views
0

У меня есть url /{database}/api/data/collections/name/{name}.Lotus Notes Xpages, Как получить «Content-Range» в документе api

Как это получить? {name} с getResponseHeader("Content-Range")?

+0

Вы хотите, чтобы получить * число * всех записей? Используете ли вы LotusScript, Java или SSJS, вызывающие URL-адрес службы доступа к Domino? –

+0

Да, я хочу получить количество всех записей. Я использую SSJS, вызывающий Domino Access Services URL –

ответ

1

SSJS

Вы можете получить все поля заголовка ответа с методом HttpURLConnection в getHeaderFields().

Выберите нужное поле заголовка get('Content-Range').

Пример:

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
    <xp:text escape="true" id="computedField1"> 
     <xp:this.value><![CDATA[#{javascript: 
      var url = new java.net.URL(
       "http://yourServer/yourDatabase.nsf/api/data/collections/name/All"); 
      var conn:java.net.HttpURLConnection = url.openConnection(); 
      conn.setRequestProperty("Accept", "application/json"); 
      if (conn.getResponseCode() == "200") { 
       try { 
        return conn.getHeaderFields().get('Content-Range'); 
       } catch(e) { 
        return 'Error reading header field "Content-Range"'; 
       } 
      } else { 
       return 'Error ' + conn.getResponseCode() + " " + conn.getResponseMessage(); 
      } 
     }]]></xp:this.value> 
    </xp:text> 
</xp:view> 

Этот пример XPage оказывает как результат, например, items 0-9/35 и указывает, что ответ содержит записи с 0 по 9 из 35 записей.

Если вы хотите, чтобы получить общее количество записей только затем измените строку

    return conn.getHeaderFields().get('Content-Range'); 

в

    var range = conn.getHeaderFields().get('Content-Range').get(0); 
        var total = range.substr(range.indexOf('/') + 1); 
        return total; 

это сделает только тот же URL 35.

CSJS метод

Используйте XMLHttpRequest в getResponseHeader() на стороне клиента:

var xhr = new XMLHttpRequest(); 
xhr.open('GET', url, false); 
xhr.send(null); 
var range = xhr.getResponseHeader("Content-Range"); 
var total = range.substr(range.indexOf('/') + 1); 
return total 
+0

Спасибо вам большое –

+0

, он работает в сервере js. но я хочу получить в js клиента. ~ он работает, когда я использую: var xhr = new XMLHttpRequest(); xhr.open ('GET', url, false); xhr.send (null); var contentRanger = xhr.getResponseHeader («Content-Range»). ToLowerCase(); contentRanger = contentRanger.replace ('items', ''); contentRanger = contentRanger.split ('/'); var total = contentRanger [1]; return total –

+0

Я создал версию JavaScript на стороне сервера (SSJS), как вы сказали в своем комментарии «Я использую SSJS ...». Итак, теперь у нас есть обе версии: SSJS в моем ответе и CSJS в вашем комментарии. –

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