2016-08-31 4 views
3

Я пытаюсь использовать jsonRpcService для печати значения на консоли. Просто для тестирования. Но когда я называю метод я получаю эту ошибку на консоли браузера:Получение ошибки при использовании jsonRpcService на Xpages

POST http://localhost/Teste.nsf/Teste.xsp/RpcService?$$viewid=!ei0pdt23xx! 400 (Bad Request) 
Error: Unable to load /Teste.nsf/Teste.xsp/RpcService?$$viewid=!ei0pdt23xx! status:400(…) 
Unable to load /Teste.nsf/Teste.xsp/RpcService?$$viewid=!ei0pdt23xx! status:400 
Error: Unable to load /Teste.nsf/Teste.xsp/RpcService?$$viewid=!ei0pdt23xx! status:400(…) 
Error: Unable to load /Teste.nsf/Teste.xsp/RpcService?$$viewid=!ei0pdt23xx! status:400(…) 

Вот образ ошибки: http://i.stack.imgur.com/T5ekl.jpg

Я уже искал много для одного решения этой ошибки, но я получил ничего.

Это код, который я использую:

<xe:jsonRpcService id="jsonRpcService1" serviceName="metodos" 
    pathInfo="RpcService"> 
<xe:this.methods> 
    <xe:remoteMethod name="teste" script="print('teste')"></xe:remoteMethod> 
</xe:this.methods> 
</xe:jsonRpcService> 

И это код, который я использую на консоли, чтобы вызвать функцию

metodos.teste() 

Кто-нибудь знает, что я» Неправильно?

Благодаря

+0

«Методос» - это имя jsonRpcService. Браузер распознает его, и если я использую «metodos.teste()», функция будет вызвана, но после этого служба вернет ошибку и из-за этой ошибки я не могу обработать возврат функции. –

ответ

1

Вы должны возвращать значение в сценарии и ваш клиент должен ждать ответа с обратного вызова функции.

Это рабочий пример:

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view 
    xmlns:xp="http://www.ibm.com/xsp/core" 
    xmlns:xe="http://www.ibm.com/xsp/coreex"> 
    <xe:jsonRpcService 
     id="jsonRpcService1" 
     serviceName="metodos" 
     pathInfo="RpcService"> 
     <xe:this.methods> 
      <xe:remoteMethod 
       name="teste" 
       script="return 'teste'"> 
      </xe:remoteMethod>   
     </xe:this.methods> 
    </xe:jsonRpcService> 

    <xp:button 
     value="Test" 
     id="button1"> 
     <xp:eventHandler 
      event="onclick" 
      submit="false"> 
      <xp:this.script><![CDATA[ 
       var deferred = metodos.teste(); 
       deferred.addCallback(function(result) { 
        alert(result); 
       });]]></xp:this.script> 
     </xp:eventHandler> 
    </xp:button> 

</xp:view> 

При нажатии на кнопку «Test» окно предупреждения появляется с сообщением «TESTE».

Вы можете добавить дополнительный код до return 'teste', как и ваш оригинал print('teste'). Сценарий просто должен что-то вернуть ...

+0

Спасибо, это была проблема. –

+0

Knut, В моем локальном приложении этот код работает, но когда я помещаю его в другое приложение, находящееся на сервере, код возвращает мне ту же ошибку. Вы знаете какую-либо возможную причину этого? –

+0

Я протестировал пример выше на сервере, чтобы он работал ... –