我想将Ajax(从Web服务获取数据)注入到GWT生成的html代码中。
我尝试使用ScriptInjector注入jQuery的CDN和脚本。
这是我将cdn注入到html头的方法:
Element head = Document.get().getElementsByTagName("head").getItem(0);
ScriptElement sce = Document.get().createScriptElement();
sce.setSrc("http://code.jquery.com/jquery-3.1.1.min.js");
head.appendChild(sce);
效果很好,我检查了我的页面并将其添加到头部。
这是我尝试注入脚本以从Web服务获取数据的方式:
ScriptInjector.fromString(" $.ajax({\n" +
" dataType: \"json\",\n" +
" url: \"http://localhost/geoTrackerTest.php?id=15\",\n" +
" data: \"data\",\n" +
" success: function(data){\n"
+" console.log(\"success\");" +
" document.getElementById(\"frigoTempAjax\").innerHTML = data[0].frigo_temperature;\n" +
" }\n" +
"});").inject();
我希望在控制台上收到一条成功消息,并在具有指定ID的div中获取一个值,但出现以下错误:
ReferenceError: $ is not defined
答案 0 :(得分:2)
默认情况下,ScriptInjector
会插入运行GWT代码的隐藏iframe中;您需要告诉它注入到jQuery脚本所在的页面中。
ScriptInjector.fromString(…).setWindow(ScriptInjector.TOP_WINDOW).inject();
但是在这种情况下,最好用等效的GWT代码替换jQuery代码(使用com.google.gwt.http
或com.google.gwt.xhr
)