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

时间:2011-03-25 03:58:17

标签: javascript jquery ajax silverlight windows-phone-7

这个错误似乎引发了所谓的javascript函数出错:

SystemException was unhandled    
An unknown error has occurred. Error: 80020101.

我使用javascript作为web-app后端的接口,我有两个调用工作正常,从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调用复制到第二个调用(这发生在用户输入,第一个发生在加载时)。结果是一样的(我得到了同样的错误)。只要它们不包含ajax调用(它出现),我就可以从这个事件的javascript中获取其他命令。所以你可能认为这是一个时间问题 - 所以我将调用移到了上面调用正在工作的其他InvokeScripts的地方,它仍然不起作用(相同的例外)。

我也尝试在一个单独的线程上调用它,使用Dispatcher.BeginInvoke进行测量,没有骰子。

Dispatcher.BeginInvoke(() =>
{
    MyBrowser.InvokeScript("postData", "thedata", "CreatePost");
});

我完全不知所措。似乎有一些一致性,因为如果呼叫失败,它每次都会失败,但我不知道有效的呼叫和失败的呼叫之间有什么区别。

任何人都可以告诉我我做错了什么,或者我不明白一起使用InvokeScript和Ajax是什么?

谢谢!

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

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

  • 有2个不同的事件,我正在进行这些调用; 1)当浏览器控件上的页面加载完成时,2)当用户点击我的“发布”按钮时
  • 当Ajax调用是来自加载事件的GET时,不会发生错误
  • 从用户事件
  • 调用相同的GET调用时发生错误
  • 使用来自加载事件的POST调用Ajax调用时,错误也会发生错误
  • 调用不从用户事件尝试任何Ajax的函数时不会发生错误

4 个答案:

答案 0 :(得分:6)

如果无法找到javascript方法或JS抛出错误,您将收到80020101错误。

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

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

答案 1 :(得分:3)

看到GET使用JSONP,而POST根本不工作,似乎暗示你可能会跨域?通常在同一个域上,不需要使用JSON * P *。

所以我的猜测是违反同源政策。

答案 2 :(得分:0)

我刚刚解决了类似的问题。

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

我猜你也可以将一个字符串传递给一个javascript数组。

汤姆

答案 3 :(得分:0)

唯一的问题(因为我遇到了同样的问题),因为你的网页浏览器控件没有被加载并且正在调用javascript函数。

如同其中一个答案一样,已经表明了。