2017-05-27 2 views
0

Ich habe unten versucht ....Wie erhalten Sie den Rückgabewert der Eclipse-Funktion von der Java-Script-Funktion, die Daten von der Ajax-Anfrage über den SWT-Browser erhält?

Ich habe dies in Eclipse: Ich habe eine Schaltfläche in Java, die diese Funktion in Javascript löst

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

Dann habe ich diese Funktion in 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; 
} 

Aber ich bekomme immer leeres Objekt. Weil die Ajax-Anfrage einige Sekunden dauert, und meine JavaScript-Funktion gibt das leere Objekt zurück, das auf die Rückgabe der Daten wartet.

Wie kann ich das erreichen ..?

Antwort

1

Wenn Sie mit Ajax-Anrufen arbeiten, müssen Sie einen so genannten BrowserFuntion von Ihrem Javascript-Code aufrufen, wenn Sie das Ergebnis haben.

Hier ist ein Beispiel dafür, wie ein BrowserFunction zu definieren, und wie es von Javascript nennen:

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

Weiterhin ist eine hervorragende Anleitung über Browser von Vogella hier:

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

+0

Danke. .some new stuff !!! .. Eigentlich musste ich in meiner Ajax-Anfrage 'async: "false" 'setzen, wodurch die JavaScript-Funktion null auf Java zurückgab, bevor die Anfrage abgeschlossen wurde. Danke für die Information... –

Verwandte Themen