Javascript 为什么WP7 WebBrowser InvokeScript调用抛出错误:80020101?

Javascript 为什么WP7 WebBrowser InvokeScript调用抛出错误:80020101?,javascript,jquery,ajax,silverlight,windows-phone-7,Javascript,Jquery,Ajax,Silverlight,Windows Phone 7,此错误似乎会导致调用的javascript函数出现任何错误: SystemException was unhandled An unknown error has occurred. Error: 80020101. 我使用javascript作为web应用后端的接口,有两个调用工作正常,从ajax调用加载并返回JSON,如下所示: 在Silverlight中: MyBrowser.InvokeScript("getData", "/Me/Feed?numberOfResults=-1

此错误似乎会导致调用的javascript函数出现任何错误:

SystemException was unhandled    
An unknown error has occurred. Error: 80020101.
我使用javascript作为web应用后端的接口,有两个调用工作正常,从ajax调用加载并返回JSON,如下所示:

在Silverlight中:

MyBrowser.InvokeScript("getData", "/Me/Feed?numberOfResults=-1", "MyFeed");
加载到WebBrowser中的Javascript

function getData(url, context) {
    $.ajax({
        url: url,
        dataType: 'jsonp',
        success: function (result) {
            callback(result, context);
        }
    });
}
但后来我想将数据发回服务器,我也在做同样的事情:

MyBrowser.InvokeScript("postData", "thedata", "CreatePost");

function postData(payload, context) {
    $.ajax({
        type: "POST",
        url: "/Post/Create?" + tz(),
        data: payload,
        dataType:"json",
        success:function (result) {
            callback(result, context);
        }
    });
}
现在我得到了一个例外

真正奇怪的是,我可以立即从脚本中调用该函数,它可以很好地发布到后端

postData("sampledata", "PostTest");
起初,唯一的区别似乎是一个是GET,另一个是POST,所以我将GET-ajax调用复制到第二个调用中(在用户输入时发生,第一个调用在加载时发生)。结果是一样的(我得到了同样的错误)。我可以通过这个事件在javascript中触发其他命令,只要它们不包含ajax调用(看起来是这样)。因此,您可能认为这是一个计时问题——因此我将调用移到上面,调用其他正在工作的InvokeScripts,但仍然不工作(相同的异常)

我还尝试在一个单独的线程上调用它,使用Dispatcher.BeginInvoke进行良好的度量,不使用骰子

Dispatcher.BeginInvoke(() =>
{
    MyBrowser.InvokeScript("postData", "thedata", "CreatePost");
});
我完全不知所措。这似乎有一定的一致性,如果一个调用失败,它每次都会失败,但我不知道有效调用和失败调用之间有什么区别

有谁能告诉我我做错了什么,或者我不明白一起使用InvokeScript和Ajax的原因是什么

谢谢

[编辑-添加此内联(在评论中),因为我得到了很多问题]

我已经为此工作了6个小时,这就是我所看到的:

  • 有两个不同的事件,我打这些电话;1) 当浏览器控件上的页面加载完成时,2)当用户点击我的“发布”按钮时
  • 当Ajax调用是从load事件获取时,不会发生此错误
  • 从用户事件调用相同的GET调用时,会发生错误
  • 从load事件中使用POST调用Ajax调用时也会发生错误
  • 调用不尝试从用户事件中使用任何Ajax的函数时,不会发生此错误

如果找不到javascript方法或th JS抛出错误,您将得到
80020101
错误

在查找方法方面,控件将与签名完全匹配。这不是标准的javascript行为,因此要小心


当心在浏览器控件中缓存页面(及其内容),因为这会吸引很多人(

看到使用JSONP开始工作,而帖子根本不起作用,似乎暗示您可能要跨域?通常在同一个域上,不需要使用JSON*p*


所以我猜这违反了同一原产地政策。

我刚刚解决了一个类似的问题

这有点奇怪……它需要: 1.将参数作为逗号分隔字符串传递给javascript函数 2.使用split()解析javascript中的字符串 3.创建表达式字符串(即使用参数调用函数) 4.对字符串表达式执行eval()

我猜您还可以将一个求值字符串传递到javascript数组中

Tom

唯一的问题(我也遇到过同样的问题)是因为您的web浏览器控件没有加载,javascript函数正在被调用


正如在其中一个答案中所指出的那样。

它是通过自然的XMLHTTPRequest实现的吗?调用InvokeScript时页面是否已完全加载?可能是$ajax函数尚未加载?嗨,NeXXeuS-我不确定我是否理解你的建议。你的意思是我应该尝试放弃使用Javascript作为web接口吗应用程序并直接访问它?主要是,我的团队不想只为这一个客户端重写他们所有的东西,另一件事是,这种方法提供了现有的Facebook身份验证,并避免了所有跨域Silverlight问题。它肯定是加载的。加载时我调用getData,一切正常。稍后,当ser在我的应用程序中点击一个按钮,表示调用了postData并得到了这个错误。谢谢,Matt。这也是我的理解-但是你可以在我的示例代码中看到函数名和签名是相同的;“postData”,取2个参数。我知道页面缓存-我在每次测试之前都会清除它。@Nathan Roberton更改方法的内容以确定问题所在。让
postData
做一些肯定有效的事情以确保它不是互操作问题。这也可能是jQuery问题,因为它不完全支持IE7Mobile。谢谢,Matt-我已经为此工作了6个小时,这就是我所看到的:-我从两个不同的事件中进行这些调用;1)当浏览器控件上的页面加载完成时,2)当用户点击我的“帖子”时按钮-当Ajax调用是从加载事件获取时不会发生错误-当从用户事件调用相同的GET调用时会发生错误-当从加载事件使用POST调用Ajax调用时也会发生错误-当调用不尝试从用户事件获取任何Ajax的函数时不会发生错误。只要为了更好的衡量,我今天早上用另一组eyesYep再次复制了这些结果,结果表明,尽管我的页面与服务位于同一个域,但我从其他地方加载javascript,这造成了跨域的情况。谢谢你,丹!