我正在开发一个应用程序,但我遇到了问题,无法在Firefox中使用它。该应用程序接收来自教育应用程序(在共享窗口中显示的网站)的javascript调用,并且它应该从.net webservice返回值。必须在接收呼叫的同一函数中返回值。 webservices返回值是字符串,可以是true,false或有时是数据库中的值。 web服务支持ajax。
由于我不确切知道如何使用javascript调用webservice,我使用的是jquery-1.3.2。
下面的代码可以在Internet Explorer上运行,但是在Firefox上使用它就像它不会等待调用返回值,尽管async:fale。
function API_LMSInitialize(param)
{
res="true";
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "../../../GateWay/WebService.asmx/LMSInitialize",
data: "{'courseid':'"+courseid+"','userid':'"+userid+"'}",
dataType: "json",
async: false,
success: function(msg) { res = msg; },
error: function(){ res="false"; }
});
return res;
}
有什么建议吗?
答案 0 :(得分:1)
您最好的选择是不要使用asynch:false,因为这会挂起浏览器,如果由于任何原因ajax调用失败,用户将不得不关闭浏览器窗口。您最好的选择是将回调函数传递给您现有的API_LMSInitialize函数 呼吁ajax电话成功。您还必须重新处理一些调用代码并将其移至回调函数中。
e.g
API_LMSInitialize( 'someParam', callbackFn);
function API_LMSInitialize(param, callback)
{
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "../../../GateWay/WebService.asmx/LMSInitialize",
data: "{'courseid':'"+courseid+"','userid':'"+userid+"'}",
dataType: "json",
async: false,
success: function(msg) { callbackFn(msg) },
error: function(){ res="false"; }
});
}
function callbackFn(msg){
//do something with the returned data
}
答案 1 :(得分:0)
可能ajax调用失败并通过错误回调退出。您可以添加警报来验证这一点,甚至可以更好地使用Firebug和console.log。
使用IE成功调用并使用Firefox失败的原因可能与返回的JSON数据有关。您确定Firefox可以正确解析这些数据吗? Firebug也可以为此提供帮助。
最后,使用同步模式并不是一个好习惯。最好修改代码以异步工作。
答案 2 :(得分:0)
如果尚未设置Web服务,则将其配置为IIS中的Web应用程序。
答案 3 :(得分:0)
dataType:“html”解决了我的问题。