【问题标题】:JSONP adapter Phonegap project not workingJSONP 适配器 Phonegap 项目不工作
【发布时间】:2014-08-25 03:23:33
【问题描述】:

我正在使用示例代码(稍作修改)来实现此处找到的 JSONP 适配器:http://coenraets.org/blog/2013/04/building-pluggable-and-mock-data-adapters-for-web-and-phonegap-applications/

我修改后的内存适配器可以工作,但是当我尝试从使用模拟数据更改为来自远程服务器的 JSONP 数据对象时,它不起作用。下面是我的内存适配器:

var JSONPAdapter = function() {

this.initialize = function(data) {
    var deferred = $.Deferred();
    url = data;
    deferred.resolve();
    return deferred.promise();
}

this.findById = function(id) {
    return $.ajax({url: url + "/" + id, dataType: "jsonp"});
}

this.findByName = function(searchKey) {
    return $.ajax(
        {
            url: url + "?Name=" + searchKey,
            dataType: "jsonp",
            success: function (data) { },
            error: function (XHR, textStatus, errorThrown) { alert("error: " + errorThrown + '\nurl: ' + url + "?Name=" + searchKey);
        }
    });
}

this.getAll = function getAll() {
    return $.ajax({ url: url, dataType: "jsonp" });
}

var url;


}

【问题讨论】:

    标签: javascript jquery cordova jsonp


    【解决方案1】:

    您不需要 /callback=?附加到网址的末尾。这是自动处理的,因为 dataType 设置为 'jsonp'。

    【讨论】:

    • 更接近了,但现在我的 phonegap 项目中未定义,因为 JSONP 对象返回。
    • 是的,感谢您的帮助。我决定在 findByName 函数中进行调用,该函数似乎可以正确触发,只是它返回未定义的数据。它确实知道未定义数据中有多少对象 (3)。
    • 我不完全确定,但我认为您现在看到的问题是由于您返回整个 $.ajax(...) 对象而不是仅返回数据.例如success: function (data) { return data; }
    • 您可能正在做某事。一件有趣的事情是,在回调函数中,如果我使用 JSON.stringify(data) 发出警报,我可以正确看到所有数据!
    • 当您返回 JSON 数据时,就像我在上面的评论中一样 - 这将是您返回的实际 JSON 对象,而不是字符串。
    【解决方案2】:

    我怀疑这是由于您的 JSONData 变量的范围。 如果 getJSONData() 调用中出现错误,则它没有正确初始化。尝试在定义函数之前声明 JSONData 变量。

    【讨论】:

    • 很抱歉没有使用 JSONData 变量,它是包含数据的 employees 变量。我从原始帖子中删除了未使用的功能以避免混淆。
    • 好的 - 添加了另一个答案,除非我错过了其他内容。
    猜你喜欢
    • 2016-04-09
    • 1970-01-01
    • 2016-02-05
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多