在Phonegap模拟器/ iPhone中通过浏览器解析JSON

时间:2012-08-07 14:06:46

标签: javascript jquery jquery-mobile cordova

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

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

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

所以我有这个Ajax success函数(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 for one),但没有一个像使用Firebug一样好。

2 个答案:

答案 0 :(得分:1)

昨天我遇到了同样的问题,在iPhone上流畅但不在网上,很烦人。

经过一些搜索,我发现,如果您设置了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) . ');'

有关same origin policy的信息,因为您的本地目录与您的服务器不在同一个域中。显然jsonp(p为填充)可以跨域工作,我会在发现后立即发布解释这个的文章。

更新: Here's where I got the tipoff也许你已经用Google搜索了

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

答案 1 :(得分:0)

简单的小东西..

需要为调用参数添加dataType:“json”,以使其在Web端工作。