Support other methods for XHR as well
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 09 May 2013 21:49:33 +0200
changeset 119915f9f43bdf5b
parent 1198 5d0bb2c25e8d
child 1200 4fdc25a60e66
Support other methods for XHR as well
ko-bck2brwsr/pom.xml
ko-bck2brwsr/src/main/java/org/apidesign/html/ko2brwsr/BrwsrCntxt.java
ko-bck2brwsr/src/main/java/org/apidesign/html/ko2brwsr/ConvertTypes.java
     1.1 --- a/ko-bck2brwsr/pom.xml	Fri May 03 11:19:23 2013 +0200
     1.2 +++ b/ko-bck2brwsr/pom.xml	Thu May 09 21:49:33 2013 +0200
     1.3 @@ -72,7 +72,7 @@
     1.4      <dependency>
     1.5        <groupId>org.apidesign.bck2brwsr</groupId>
     1.6        <artifactId>launcher.http</artifactId>
     1.7 -      <version>${bck2brwsr.version}</version>
     1.8 +      <version>0.8-SNAPSHOT</version>
     1.9        <scope>test</scope>
    1.10      </dependency>
    1.11      <dependency>
     2.1 --- a/ko-bck2brwsr/src/main/java/org/apidesign/html/ko2brwsr/BrwsrCntxt.java	Fri May 03 11:19:23 2013 +0200
     2.2 +++ b/ko-bck2brwsr/src/main/java/org/apidesign/html/ko2brwsr/BrwsrCntxt.java	Thu May 09 21:49:33 2013 +0200
     2.3 @@ -20,9 +20,12 @@
     2.4   */
     2.5  package org.apidesign.html.ko2brwsr;
     2.6  
     2.7 +import java.io.ByteArrayOutputStream;
     2.8  import java.io.IOException;
     2.9  import java.io.InputStream;
    2.10  import java.io.InputStreamReader;
    2.11 +import java.util.logging.Level;
    2.12 +import java.util.logging.Logger;
    2.13  import net.java.html.json.Context;
    2.14  import org.apidesign.html.json.spi.ContextBuilder;
    2.15  import org.apidesign.html.json.spi.FunctionBinding;
    2.16 @@ -61,9 +64,19 @@
    2.17          R r = new R();
    2.18          if (call.isJSONP()) {
    2.19              String me = ConvertTypes.createJSONP(r.arr, r);
    2.20 -            ConvertTypes.loadJSON(call.composeURL(me), r.arr, r, me);
    2.21 +            ConvertTypes.loadJSONP(call.composeURL(me), me);
    2.22          } else {
    2.23 -            ConvertTypes.loadJSON(call.composeURL(null), r.arr, r, null);
    2.24 +            String data = null;
    2.25 +            if (call.isDoOutput()) {
    2.26 +                try {
    2.27 +                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    2.28 +                    call.writeData(bos);
    2.29 +                    data = new String(bos.toByteArray(), "UTF-8");
    2.30 +                } catch (IOException ex) {
    2.31 +                    call.notifyError(ex);
    2.32 +                }
    2.33 +            }
    2.34 +            ConvertTypes.loadJSON(call.composeURL(null), r.arr, r, call.getMethod(), data);
    2.35          }
    2.36      }
    2.37  
     3.1 --- a/ko-bck2brwsr/src/main/java/org/apidesign/html/ko2brwsr/ConvertTypes.java	Fri May 03 11:19:23 2013 +0200
     3.2 +++ b/ko-bck2brwsr/src/main/java/org/apidesign/html/ko2brwsr/ConvertTypes.java	Thu May 09 21:49:33 2013 +0200
     3.3 @@ -112,36 +112,28 @@
     3.4          return s;
     3.5      }
     3.6      
     3.7 -    @JavaScriptBody(args = { "url", "arr", "callback" }, body = ""
     3.8 +    @JavaScriptBody(args = { "url", "arr", "callback", "method", "data" }, body = ""
     3.9          + "var request = new XMLHttpRequest();\n"
    3.10 -        + "request.open('GET', url, true);\n"
    3.11 +        + "if (!method) method = 'GET';\n"
    3.12 +        + "request.open(method, url, true);\n"
    3.13          + "request.setRequestHeader('Content-Type', 'application/json; charset=utf-8');\n"
    3.14          + "request.onreadystatechange = function() {\n"
    3.15          + "  if (this.readyState!==4) return;\n"
    3.16          + "  try {\n"
    3.17          + "    arr[0] = eval('(' + this.response + ')');\n"
    3.18          + "  } catch (error) {;\n"
    3.19 -        + "    throw 'Cannot parse' + error + ':' + this.response;\n"
    3.20 -        + "  };\n"
    3.21 +        + "    arr[0] = this.response;\n"
    3.22 +        + "  }\n"
    3.23          + "  callback.run__V();\n"
    3.24          + "};"
    3.25 -        + "request.send();"
    3.26 +        + "if (data) request.send(data);"
    3.27 +        + "else request.send();"
    3.28      )
    3.29 -    private static void loadJSON(
    3.30 -        String url, Object[] jsonResult, Runnable whenDone
    3.31 +    static void loadJSON(
    3.32 +        String url, Object[] jsonResult, Runnable whenDone, String method, String data
    3.33      ) {
    3.34      }
    3.35      
    3.36 -    public static void loadJSON(
    3.37 -        String url, Object[] jsonResult, Runnable whenDone, String jsonp
    3.38 -    ) {
    3.39 -        if (jsonp == null) {
    3.40 -            loadJSON(url, jsonResult, whenDone);
    3.41 -        } else {
    3.42 -            loadJSONP(url, jsonp);
    3.43 -        }
    3.44 -    }
    3.45 -    
    3.46      @JavaScriptBody(args = { "url", "jsonp" }, body = 
    3.47          "var scrpt = window.document.createElement('script');\n "
    3.48          + "scrpt.setAttribute('src', url);\n "
    3.49 @@ -150,7 +142,7 @@
    3.50          + "var body = document.getElementsByTagName('body')[0];\n "
    3.51          + "body.appendChild(scrpt);\n"
    3.52      )
    3.53 -    private static void loadJSONP(String url, String jsonp) {
    3.54 +    static void loadJSONP(String url, String jsonp) {
    3.55          
    3.56      }
    3.57