首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON文件不通过data.responseText显示。虽然在Chrome中,它在调试器中很好

JSON文件不通过data.responseText显示。虽然在Chrome中,它在调试器中很好
EN

Stack Overflow用户
提问于 2013-11-04 16:27:34
回答 1查看 318关注 0票数 0

这是我的密码:

代码语言:javascript
复制
var what = "some/url/path..."
$(document).ready(function () {
    var _getInfo = function getInfo(what) {
        $.ajax({
            type: 'GET',
            url: what,
            crossDomain: true,
            //data: "{}",
            async: false,
            jsonpCallback: 'jsonpCallback',
            dataType: 'jsonp',
            contentType: 'application/json',
            success: function (data) {

                console.log("Data found: " + data.responseText);
            },
            error: function (data) {

                console.log("Data not found: " + data.responseText);
            }
        });
    };

    var retVal = JSON.parse(_getInfo(networksURL));
    console.log("Return Value: " + retVal);
}); 

JSON对象在调试器的“网络”选项卡下返回得很好.没问题..。但是..。这是一个很大的但是,JSON对象不会通过上面的代码在console.log中显示。有什么想法吗?

哦,是的,我得到了这个错误: Uncaught :意外标记u,包含: var retVal = JSON.parse(_getInfo(networksURL));

谢谢

更新:

好的,错误已经消失了,但是我仍然在网络TAB下的CHROME调试器中得到了这个信息:

0:{id:23ef0d23-0d8d-4466-98da-81ef30791773,网络类型:1,控制器id:10.255.135.22,重定向类型:0,…} controllerIp:"10.255.135.22“id:"23ef0d23-0d8d-4466-98da-81ef30791773”名称:"n1“networkCost: 1351 networkType:1 networkWeight: 64888注释:”这是网络1的网络“redirectType:0 1:{id:8e2822b1-49a8-498-979b-2849cfa82148,网络类型:1,控制员id:10.255.150.24,重定向类型:0,…} 2:{id:678b4a01-a6a6-449f-966d-c50c74964729,网络类型:2,控制器id:10.255.150.22,重定向类型:0,…} 3:{id:b4b46748-511a-49bf-9d22-8da014c76cc2,网络类型:3,控制器id:10.255.654.22,重定向类型:0,…}

这就是回来的原因..。很好,但这是在控制台日志中:

未找到数据:未定义

有什么想法吗?

再次更新:

好吧,这就是我现在要说的:

0:{id:23ef0d23-0d8d-4466-98da-81ef30791773,网络类型:1,控制器id:10.255.135.22,重定向类型:0,…} 1:{id:8e2822b1-49a8-498e-979b-2849cfa82148,网络类型:1,控制器id:10.255.150.24,重定向类型:0,…} 2:{id:678b4a01-a6a6-449f-966d-c50c74964729,网络类型:2,控制器id:10.255.150.22,重定向类型:0,…} 3:{id:b4b46748-511a-49bf-9d22-8da014c76cc2,网络类型:3,控制器id:10.255.654.22,重定向类型:0,…}

它是上面相同的JSON对象,现在它在控制台日志中:

未找到数据:未定义的返回值:

零无属性

好的,我最终需要的是JSON对象通过responseText或data.responseText返回。

但我相信你在正确的轨道上,所以far...Thanks,让我们继续

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-04 16:29:22

这里有几个问题:

  1. 没有同步JSONP这样的东西。(好吧,过去有几个老浏览器有这样做的方法,但它们基本上都是固定的。)您可以使用JSONP,也可以执行同步ajax调用,但不能同时执行。因此,_getInfo函数不可能将数据作为返回值返回。(您还缺少了一个尝试这样做的return语句。) 相反,删除async: false (无论如何都忽略它),并将一个回调函数传递给_getInfo_getInfo(networksURL,函数(数据){console.log(“返回值:”+ data);});
  2. 您不需要在JSONP中使用JSON.parse。JSONP的本质是,当您看到它时,它已经被反序列化(解析)了。
  3. 您正在寻找data.responseText,但是success函数接收的参数不是XHR对象,而是数据。从其中移除.responseText

因此,总之,一个最小的更新:

代码语言:javascript
复制
var what = "some/url/path..."
$(document).ready(function () {
     _getInfo = function getInfo(what, callback) {
        $.ajax({
            type: 'GET',
            url: what,
            crossDomain: true,
            //data: "{}",
            async: false,
            jsonpCallback: 'jsonpCallback',
            dataType: 'jsonp',
            contentType: 'application/json',
            success: function (data) {
                console.log("Data found");
                callback(data);
            },
            error: function (data) {
                console.log("Data not found");
                callback(null); // Or whatever you want to use for the error case
            }
        });
    };

    _getInfo(networksURL, function(data) {
        console.log("Return Value: ");
        console.dir(data);
    });
}); 

单独:命名函数表达式:

代码语言:javascript
复制
var _getInfo = function getInfo() {
    // ...
};

...is是一种比较高级的构造。如果您不能百分之百地确定您是否需要它,我可能只需使用一个声明:

代码语言:javascript
复制
function getInfo() {
    // ...
}

(无论是否在名称的开头都有_,您的调用。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19772264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档