1

我使用 uiwebview 在我的 iOS 应用程序中执行远程过程。这些远程过程可以向本地 http 服务器执行某些 ajax 请求,作为回报,它将执行正确的响应处理程序。这工作正常,直到我尝试再次运行整个脚本,这导致“xmlhttprequest Exception 101”

处理程序阿贾克斯:

NSString* makeHTMLwithRegisteredHandlers(NSString* serverurl)
{
NSMutableString* output = [NSMutableString new];
if(registeredHandlers != nil)
{
    for(int i=0;i<registeredHandlers.count;i++)
    {
        NSString* scriptfunc = [AbstractRemoteProcedure makeGetJSFromClass:[registeredHandlers objectAtIndex:i]];
        [output appendFormat:@"\nfunction %@(paramdata) { \n",scriptfunc];
        [output appendString:@"\t$.ajax({  \n"];
        [output appendString:@"\t\ttype: \"POST\",  \n"];
        [output appendFormat:@"\t\turl: \"%@/%@\",  \n",serverurl,scriptfunc];
        [output appendString:@"\t\tasync:false,  \n"];
        [output appendString:@"\t\tprocessData: false, \n"];
        [output appendString:@"\t\tdata: paramdata, \n"];
        [output appendString:@"\t\terror: function(xhr, ajaxOptions, thrownError) { \n"];
        [output appendString:@"\t\t\talert(\"runtime exception:\"+thrownError);\n"];
        [output appendString:@"\t\t\tbreakmyJS();\n"];
        [output appendString:@"\t\t},\n"];
        [output appendString:@"\t\tsuccess: function(data) { \n"];
        [output appendString:@"\t\t\tresult = data;  \n"];
        [output appendString:@"\t\t}\n"];
        [output appendString:@"\t});\n"];



        [output appendString:@"\treturn result;\n} \n"];


    }
}
return output;
}

服务器端脚本:

function onConnect()
{
    //device just connected to network
}

function onRetrieve()
{

var req = new Object();
req.url = servertoRequestFrom;
req.usr = deviceIdentifier();
req.pwd = deviceSecret();
var res = HttpCrossDomainSend(jQuery.stringify(req));
var decoded = jQuery.parseJSON(res);
makeSheet(decoded);


}

function onSend()
{
}

function onAuthorize(action)
{
return false;
}

调试日志:

    2012-04-20 17:03:37.290 myApplication[7066:707] server running:http://127.0.0.1:900/

    2012-04-20 17:03:39.464 myApplication[7066:707] InitializeRuntimeProcedure start
    2012-04-20 17:03:39.466 myApplication[7066:707] InitializeRuntimeProcedure done
    2012-04-20 17:03:39.492 myApplication[7066:707] DeviceTypeProcedure start
    2012-04-20 17:03:39.493 myApplication[7066:707] DeviceTypeProcedure done
    2012-04-20 17:03:39.515 myApplication[7066:707] DeviceVersionProcedure start
    2012-04-20 17:03:39.516 myApplication[7066:707] DeviceVersionProcedure done
    2012-04-20 17:03:39.537 myApplication[7066:707] DeviceNameProcedure start
    2012-04-20 17:03:39.539 myApplication[7066:707] DeviceNameProcedure done
    2012-04-20 17:03:39.560 myApplication[7066:707] DeviceIdentiferProcedure start
    2012-04-20 17:03:39.563 myApplication[7066:707] DeviceIdentiferProcedure done
    2012-04-20 17:03:39.583 myApplication[7066:707] DeviceSecretProcedure start
    2012-04-20 17:03:39.586 myApplication[7066:707] DeviceSecretProcedure done
    2012-04-20 17:03:39.608 myApplication[7066:707] CrossDomainRequest start
    2012-04-20 17:03:40.616 myApplication[7066:707] CrossDomainRequest done
    2012-04-20 17:03:40.653 myApplication[7066:707] MakeSheetProcedure start
    2012-04-20 17:03:40.662 myApplication[7066:707] MakeSheetProcedure done
    2012-04-20 17:03:51.841 myApplication[7066:575b] onRetrieve();
    onSend();
    2012-04-20 17:04:02.026 myApplication[7066:707] DeviceTypeProcedure start
    2012-04-20 17:04:02.028 myApplication[7066:707] DeviceTypeProcedure done
4

0 回答 0