1

我正在使用Phonegap 开发一个iPhone 应用程序,前端只有JS/HTML5,后端是.NET。对于登录,我只是调用 Web 服务并取回 JSON。我遇到的问题是在桌面浏览器中调试它与在实际手机/模拟器上调试它时。

当存在有效登录时,检索到的 JSON 如下所示:

{"AuthToken":null,"Errors":[],"Success":true,"Message":null,"IsValid":true}

所以我有这个 Ajaxsuccess函数(jQuery):

success: function (data) {
    //this works on phone, but not in browser
    var success = data.Success;  //returns true             
    //this works in browser, but errors out on phone
    var dta = JSON.parse(data);
   success = dta.Success //returns true;
}

知道为什么会发生这种情况或我该如何纠正吗?对我来说,使用 Firebug 在浏览器中进行调试比总是使用模拟器更容易。我一直在使用其他一些调试方法(一种是 Weinre),但没有一个比使用 Firebug 更好。

4

2 回答 2

1

我昨天也遇到了同样的问题,在 iPhone 上运行顺利,但在 web 上却没有,烦人。

经过一番搜索我发现,如果你设置dataType: 'jsonp', 并设置一个回调函数jsonp: 'jsoncallback'

我的处理程序看起来像这样:

$('form').on('submit', function(event){
        var myData = $(this).serialize();
        jQuery.ajax({
            url: 'www.mysite.com/submit.php',
            type: 'POST',
            data: myData,
            dataType: 'jsonp',
            jsonp: 'jsoncallback',
            success: function(data, textStatus, jqXHR){
                alert('success: ' + data)
                },
            error:  function(jqXHR, textStatus, errorThrown){
                alert('error')
                }
            });
        return false;
        })

在服务器端,我以:

echo $_GET['jsoncallback'] . '(' . json_encode($myData) . ');'

由于您的本地目录与您的服务器不在同一个域中,因此有关同源策略的内容。显然 jsonp(p 表示填充)可以跨域工作,我会在找到后立即发布解释这一点的文章。

更新: 这是我得到提示的地方,也许你已经用谷歌搜索过了

希望我能给你 .NET 代码,但我希望这会有所帮助

于 2012-08-07T20:04:22.873 回答
0

简单的小东西。。

需要为调用中的参数添加 dataType: "json" 以使其在 Web 端工作。

于 2012-08-07T19:47:46.930 回答