0

此问题仅适用于WP8(Android,iOS和BB10)。当onFailure调用http适配器混合时,WP8不显示错误Mobilefirst 7.1

示例代码时,呼叫转接器:

var invocationData = { 
    adapter : appAdapterName, 
    procedure : 'checkSignature', 
    parameters : [arg0, arg1] 
}; 

WL.Client.invokeProcedure(invocationData, { 
    onSuccess : checkSignatureSuccess, 
    onFailure : checkSignatureFailure 
}); 

手柄成功:

function checkSignatureSuccess(result){ 
    alert("success"); 
} 

处理错误:

function checkSignatureFailure(result){ 
     alert(result.errorCode); 
    } 

当我关掉我的后端服务,在Android上, iOS和BB10可以显示警报“PROCEDURE_ERROR”。但在WP8上,没有显示任何警报。

这是我的后端服务关闭时从message.log记录日志。

response: 
Not Found 
Server=Apache-Coyote/1.1 
Content-Type=text/html;charset=utf-8 
Content-Length=1144 
Date=Thu, 22 Sep 2016 11:22:05 GMT 
<html><head><title>xxxxxxxx</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>xxxxxx: HTTP Status 404 - xxxxxxxxxxxxxxxxxxxxxxxxxxxx</h1><HR size="1" noshade="noshade"><p><b>xxxxxx: type</b> xxxxxx: Status report</p><p><b>xxxxx: message</b> <u>xxxxxxxxxxxxxxxxxxxxxxxxx</u></p><p><b>xxxxxx: description</b> <u>xxxxxxxx: The requested resource is not available.</u></p><HR size="1" noshade="noshade"><h3>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</h3></body></html> [project xxxxx] 
[9/22/16 18:20:00:102 ICT] 00000127 om.worklight.integration.services.impl.DataAccessServiceImpl E FWLSE0099E: An error occurred while invoking procedure [project xxxxx]ApplicationHTTPAdapter/checkSignature: parameters: [project xxxxx] 
TypeError: Cannot read property "Body" from undefined (2016-09-22T17:04:18.759Z/6733847e906e1c3f58643f980a1375aa2209260b/ApplicationHTTPAdapter-impl.js#121) 
FWLSE0101E: Caused by: [project xxxxx]nullorg.mozilla.javascript.EcmaError: TypeError: Cannot read property "Body" from undefined (2016-09-22T17:04:18.759Z/6733847e906e1c3f58643f980a1375aa2209260b/ApplicationHTTPAdapter-impl.js#121) 
    at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3687) 
    at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3665) 
    at org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3693) 
    at org.mozilla.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3712) 
    at org.mozilla.javascript.ScriptRuntime.undefReadError(ScriptRuntime.java:3725) 
    at org.mozilla.javascript.ScriptRuntime.getObjectProp(ScriptRuntime.java:1483) 
    at org.mozilla.javascript.gen._2016_09_22T17_04_18_759Z_6733847e906e1c3f58643f980a1375aa2209260b_ApplicationHTTPAdapter_impl_js_3._c_sendRequest_5(2016-09-22T17:04:18.759Z/6733847e906e1c3f58643f980a1375aa2209260b/ApplicationHTTPAdapter-impl.js:121) 
    at org.mozilla.javascript.gen._2016_09_22T17_04_18_759Z_6733847e906e1c3f58643f980a1375aa2209260b_ApplicationHTTPAdapter_impl_js_3._c_checkSignature_76(2016-09-22T17:04:18.759Z/6733847e906e1c3f58643f980a1375aa2209260b/ApplicationHTTPAdapter-impl.js:1785) 
    at org.mozilla.javascript.gen._2016_09_22T17_04_18_759Z_6733847e906e1c3f58643f980a1375aa2209260b_ApplicationHTTPAdapter_impl_js_3.call(2016-09-22T17:04:18.759Z/6733847e906e1c3f58643f980a1375aa2209260b/ApplicationHTTPAdapter-impl.js) 
    at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394) 
    at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3091) 
    at org.mozilla.javascript.gen._2016_09_22T17_04_18_759Z_6733847e906e1c3f58643f980a1375aa2209260b_ApplicationHTTPAdapter_impl_js_3.call(2016-09-22T17:04:18.759Z/6733847e906e1c3f58643f980a1375aa2209260b/ApplicationHTTPAdapter-impl.js) 
    at com.worklight.integration.js.JavaScriptManager.callFunction(JavaScriptManager.java:267) 
    at com.worklight.integration.js.JavaScriptManager.invokeFunction(JavaScriptManager.java:241) 
    at com.worklight.integration.js.JavaScriptManager.invokeFunction(JavaScriptManager.java:211) 
    at com.worklight.integration.services.impl.AdapterManagerImpl.invokeFunction(AdapterManagerImpl.java:113) 
    at com.worklight.integration.js.JavaScriptProcedureInvoker.invoke(JavaScriptProcedureInvoker.java:42) 
    at com.worklight.integration.model.ProcedureInvoker.invokeProcedure(ProcedureInvoker.java:54) 
    at com.worklight.integration.model.Procedure.invoke(Procedure.java:166) 
    at com.worklight.integration.services.impl.DataAccessServiceImpl.callProcedureInternal(DataAccessServiceImpl.java:775) 
    at com.worklight.integration.services.impl.DataAccessServiceImpl.callProcedure(DataAccessServiceImpl.java:721) 
    at com.worklight.integration.services.impl.DataAccessServiceImpl.access$200(DataAccessServiceImpl.java:74) 
    at com.worklight.integration.services.impl.DataAccessServiceImpl$3.execute(DataAccessServiceImpl.java:603) 
    at com.worklight.core.auth.impl.AuthenticationServiceBean.accessResource(AuthenticationServiceBean.java:82) 
    at com.worklight.integration.services.impl.DataAccessServiceImpl.invokeProcedureInternal(DataAccessServiceImpl.java:600) 
    at com.worklight.integration.services.impl.DataAccessServiceImpl.invokeProcedure(DataAccessServiceImpl.java:160) 
    at com.worklight.gadgets.serving.handler.BackendQueryHandler.getContent(BackendQueryHandler.java:95) 
    at com.worklight.gadgets.serving.handler.BackendQueryHandler.doPost(BackendQueryHandler.java:56) 
    at com.worklight.gadgets.serving.GadgetAPIServlet.doGetOrPost(GadgetAPIServlet.java:178) 
    at com.worklight.gadgets.serving.GadgetAPIServlet.doPost(GadgetAPIServlet.java:135) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:595) 
    at com.worklight.gadgets.serving.GadgetAPIServlet.service(GadgetAPIServlet.java:118) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1240) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:760) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:443) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:127) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:88) 
    at com.worklight.core.auth.impl.AuthenticationFilter$1.execute(AuthenticationFilter.java:224) 
    at com.worklight.core.auth.impl.AuthenticationServiceBean.accessResource(AuthenticationServiceBean.java:82) 
    at com.worklight.core.auth.impl.AuthenticationFilter.doFilter(AuthenticationFilter.java:229) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:85) 
    at com.worklight.analytics.AnalyticsFilter.doFilter(AnalyticsFilter.java:124) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:85) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:949) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1029) 
    at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:78) 
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:885) 
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:252) 
    at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:584) 
    at com.ibm.ws.threading.internal.Worker.executeWork(Worker.java:439) 
    at com.ibm.ws.threading.internal.Worker.run(Worker.java:421) 
    at java.lang.Thread.run(Thread.java:745) 

           com.worklight.common.log.filters.ErrorFilter 
+0

你可以尝试 ////// 功能checkSignatureFailure(结果){ 警报(JSON.stringify(结果)); } ////// 只是为了看看是否有任何响应到达客户端。 另外,如果您等待30秒,您是否看到错误回调触发?只是试图看看它是否在等待30秒的默认超时期限 –

+0

Hai Vivin,谢谢你的回应。 我试图使用JSON.stringify(结果),仍然没有收到任何回应。 我也等到30秒,没有收到错误代码“REQUEST_TIMEOUT”。 有一段时间,我使用setTimeout javascript函数来处理这种情况,并且只能用于WP8平台,直到我找到这种情况的解决方案。呵呵。 如果您有任何其他建议,请告诉我。谢谢Vivin。 –

回答

0

Windows Phone不支持显示alert方法。相反,您需要想出一种向应用程序中的最终用户显示提示的不同方式。

例如,使用这样的:Prompt in Windows Phone

navigator.notification.alert(
    'You are the winner!', // message 
    alertDismissed,   // callback 
    'Game Over',   // title 
    'Done'     // buttonName 
); 

function alertDismissed() { 
    // do something 
} 
+0

海伊丹,谢谢你的回答,但我认为问题不在于警报方法。因为,如果我再次打开后端服务,WP8可以显示警报“成功”。我尝试通过更改页面事件jquery mobile来更改警报方法,而WP8仍然无法读取它。 它看起来像WP8没有收到来自WL.Client.invokeProcedure的任何响应。 –