使用ScriptInjector GWT注入ajax

时间:2019-05-22 04:22:22

标签: javascript ajax gwt

我想将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

1 个答案:

答案 0 :(得分:2)

默认情况下,ScriptInjector会插入运行GWT代码的隐藏iframe中;您需要告诉它注入到jQuery脚本所在的页面中。

ScriptInjector.fromString(…).setWindow(ScriptInjector.TOP_WINDOW).inject();

但是在这种情况下,最好用等效的GWT代码替换jQuery代码(使用com.google.gwt.httpcom.google.gwt.xhr