2017-05-27 5 views
0

私は日食でこれを持っている....以下SWTブラウザを使用してajaxリクエストからデータを取得するJavaスクリプト関数からEclipse関数に戻り値を取得する方法は?

を試してみました:私はjavascriptの

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

でこの機能をトリガーするJavaでのボタンを持っているその後、私は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関数は空のオブジェクトを返して、データを返す要求を待っているからです。

これをどのように達成できますか?

答えて

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(); 
     } 
    } 
} 

さらに、優れたチュートリアルについてBrowser Vogellaからここに:

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

+0

ありがとうございます。実際には私のajaxリクエストでは、async: "false"を設定しなければならなかったので、javascript関数は要求を完了する前にjavaにnullを返していました。 情報をありがとう... –

関連する問題