我正在尝试从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的模拟器上对此进行了测试。
答案 0 :(得分:1)
我还没有检查过你的javascript,但我之前遇到问题之前我尝试在BrowserField
之前请求中的内容实际上已将该字段添加到其包含的{{1 }或Manager
。
所以,就这一行:
Screen
在之前 之前
更新:当我在9550 5.0模拟器中运行您的代码时,我看到了同样的问题。然而,当它被分成许多行,包括引号,加号和转义字符时,很难调试一长串html和脚本。一般来说,如果HTML是静态的,我建议将其放入一个.html文件中,该文件与您的应用程序捆绑在一起作为资源。 所以,我尝试将html字符串的全部内容放入项目中的文件中,名为 然后我成功地看到它使用这个Java加载并执行javascript 所以,我建议那样试试。 (注意:我不认为我使用的localhost基本URL很重要......只有当你的html包含相对链接和路径时才重要)add(browser);
browser.displayContent(/* content here */);
的{{1}}文件夹下:/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>
答案 1 :(得分:0)
使用绝对URL打开XMLHttpRequest有什么问题。它需要使用relativie url(即:demo_get.asp),并且browserfield需要正确设置baseurl(http://www.w3schools.com/ajax/)。
这非常不方便。