【问题标题】:BlackBerry - Browserfield XMLHttpRequest not valid黑莓 - Browserfield XMLHttpRequest 无效
【发布时间】:2013-06-12 15:05:02
【问题描述】:

我正在尝试从 BrowserField 内的 javascript 启动一个 ajax 请求。

这是一个演示应用程序,它只是一个 html 元素,它尝试在点击时发出 ajax 请求。

public MyScreen() {
    // Set the displayed title of the screen
    setTitle("MyTitle");

    BrowserFieldConfig _myBrowserFieldConfig = new BrowserFieldConfig();

    _myBrowserFieldConfig.setProperty(
            BrowserFieldConfig.JAVASCRIPT_ENABLED, Boolean.TRUE);
    _myBrowserFieldConfig.setProperty(BrowserFieldConfig.ALLOW_CS_XHR,
            Boolean.TRUE);
    BrowserField browser = new BrowserField(_myBrowserFieldConfig);
    browser.displayContent(
            "<!DOCTYPE html><html><head>"
                    + "<script>function loadXMLDoc(){"
                        + "alert('t'); "
                        + "var xmlhttp;"
                        + "if (window.XMLHttpRequest) "
                        +"{ "
                            + "xmlhttp = new XMLHttpRequest();  "
                        + "} "
                        + "else { "
                            + "xmlhttp = new ActiveXObject(\"Microsoft.XMLHTTP\");  "
                        + "}"
                        + " xmlhttp.onreadystatechange=function()  "
                        +"{ "
                            + " if (xmlhttp.readyState==4 && xmlhttp.status==200) "
                            + "{"
//                                  + " document.getElementById(\"myDiv\").innerHTML=xmlhttp.responseText;"
                            + "}"
                            +"alert('State:'+xmlhttp.readyState+ 'status'+ xmlhttp.status)"
                        + "} "
                        + "xmlhttp.open(\"GET\",\"http://www.w3schools.com/ajax/demo_get.asp\",true);"
                        + "xmlhttp.send(); "
                        + "}"
                    + "</script>"
                    + "</head><body><h2>AJAX</h2><a onclick=\"javascript:loadXMLDoc();\">Request data</a><div id=\"myDiv\"></div></body></html>",
            "http://www.w3schools.com");
    add(browser);
}

问题是即使是第一个警报也不起作用,所以应该有一个 javascript 语法错误,但是,对我来说一切看起来都很好。我在我的计算机上尝试了来自 Firefox 的这段代码,并显示了警报(我知道跨域并不总是可能的)。 那么,我的脚本中的错误是什么?

我已经在 BB 5.0.0 和 7.0.0 的模拟器上对此进行了测试。

【问题讨论】:

    标签: javascript blackberry xmlhttprequest blackberry-simulator browserfield


    【解决方案1】:

    我还没有检查你的 javascript,但是当我尝试在 BrowserField 中请求内容之前遇到问题987654323@.

    所以,只要把这行:

    add(browser);
    

    调用之前

    browser.displayContent(/* content here */);
    

    更新:当我在 9550 5.0 模拟器中运行您的代码时,我看到了同样的问题。但是,当一长串 html 和脚本被分成多行时,很难调试它,包括引号、加号和转义字符。一般来说,如果 HTML 是静态的,我建议将它放入一个 .html 文件中,并作为 resource 与您的应用程序捆绑在一起。

    所以,我尝试将您的 html 字符串的全部内容放入我项目中的一个文件中,该文件位于 /res 文件夹下,名为 content.html

    <!DOCTYPE html>
    <html>
        <head>
             <script>
                    function loadXMLDoc(){
                        alert('t');
                        var xmlhttp;
                        if (window.XMLHttpRequest)
                        {
                            xmlhttp = new XMLHttpRequest();
                        }
                        else {
                            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        xmlhttp.onreadystatechange=function()
                        {
                            if (xmlhttp.readyState==4 && xmlhttp.status==200)
                            {
                                   //document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
                            }
                            alert('State:'+xmlhttp.readyState+ 'status'+ xmlhttp.status)
                        }
                        xmlhttp.open("GET","http://www.w3schools.com/ajax/demo_get.asp",true);
                        xmlhttp.send();
                    }
               </script>
          </head>
          <body><h2>AJAX</h2><a onclick="javascript:loadXMLDoc();">Request data</a><div id="myDiv"></div>
          </body>
    </html>
    

    然后,我成功地看到它使用这个 Java 加载并执行了 javascript onclick

       public MyScreen() {
          super(MainScreen.VERTICAL_SCROLL | MainScreen.VERTICAL_SCROLLBAR);
    
          browser = new BrowserField();
          add(browser);
    
          InputStream content = getClass().getResourceAsStream("/content.html");     
          try {
             byte[] html = IOUtilities.streamToBytes(content);
             browser.displayContent(new String(html), "http://localhost");
          } catch (IOException e) {
             e.printStackTrace();
          }
       }
    

    所以,我建议您尝试这种方式。 (注意:我认为我使用的 localhost 基本 URL 并不重要……只有当您的 html 包含相对链接和路径时才重要)

    【讨论】:

    • 现在有什么症状?
    • 我最初的情况没有任何改变。
    • 我找到了解决方案,无论如何,谢谢。以这种方式加载 html 更容易测试。
    【解决方案2】:

    错误的是使用绝对url打开XMLHttpRequest。它需要使用相对 url(即:demo_get.asp),并且浏览器字段需要正确设置 baseurl(http://www.w3schools.com/ajax/)。

    这很不方便。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      相关资源
      最近更新 更多