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

Parsing JSON in Phonegap simulator/iPhone vs. through browser

本文关键字:JSON 浏览器 模拟器 Phonegap iPhone      更新时间:2023-09-26

我正在使用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之一),但没有一个像使用Firebug那样好。

昨天遇到了同样的问题,在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) . ');'

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

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

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

简单的小事。

需要为调用中的参数添加数据类型:"json",以便它在 Web 端工作。