2017-05-27 86 views
0

下面我试图....如何从java脚本函数获取返回值到eclipse函数,它使用SWT浏览器从ajax请求获取数据?

我有这样的在eclipse:我有在Java一个按钮,用于在JavaScript触发该功能

Object status = browserCtrl.evaluate("return atm.java.webToJavaPerspective()"); 

然后我有这个功能在JavaScript

function atm.java.webToJavaPerspective(){ 
    returnData = {}; 
    //ajaxRequest = some ajaxRequest variable 
    $.when(ajaxRequest).then(function(data, textStatus, jqXHR) { 
    //modify the data 
    returnData.textStatus = textStatus; 

    //this return statement should return data to java function 
    return returnData; 
    }); 

//this will return empty object 
return returnData; 
} 

但我总是得到空物体。因为ajax请求需要几秒钟,并且我的javascript函数返回空的对象insted等待请求返回数据。

我该如何做到这一点..?

回答

1

在处理Ajax调用时,如果有结果,必须从Javascript代码中调用所谓的BrowserFuntion

下面是如何定义BrowserFunction一个例子,如何将它从Javascript调用:

public static void main(String[] args) 
{ 
    final Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setLayout(new FillLayout()); 

    Browser browser = new Browser(shell, SWT.NONE); 
    browser.setText("<a href='#' onClick='theJavaFunction()'>Click me!</a>"); 

    new BrowserFunction(browser, "theJavaFunction") 
    { 
     @Override 
     public Object function(Object[] objects) 
     { 
      System.out.println("Call from Javascript"); 

      return null; 
     } 
    }; 

    shell.pack(); 
    shell.open(); 

    while (!shell.isDisposed()) 
    { 
     if (!display.readAndDispatch()) 
     { 
      display.sleep(); 
     } 
    } 
} 

此外,一个优秀的教程从Vogella这里约Browser

http://blog.vogella.com/2009/12/21/javascript-swt/

+0

谢谢。 .some new stuff !!! ..其实在我的ajax请求中,我必须设置'async:“false”',因为在完成请求之前javascript函数已经返回null给java。 谢谢(你的)信息... –