0

这是我的代码:

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 对象在调试器的 NETWORKS 选项卡下很好地返回......没有问题......但是......这是一个很大的但是,JSON 对象不会通过上面的代码在 console.log 中显示。有什么想法吗???

哦,是的,我收到了这个错误: Uncaught SyntaxError: Unexpected token u at the line that contains: var retVal = JSON.parse(_getInfo(networksURL));

谢谢

更新:

好的,错误消失了,但我仍然在 NETWORKS 选项卡下的 CHROME 调试器中得到这个:

0: {id:23ef0d23-0d8d-4466-98da-81ef30791773, networkType:1, controllerIp:10.255.135.22, redirectType: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-498e-979b-2849cfa82148,networkType:1,controllerIp: 10.255.150.24, redirectType:0,…} 2: {id:678b4a01-a6a6-449f-966d-c50c74964729, networkType:2, controllerIp:10.255.150.22, redirectType:0,…} 3: {id:b4b46748-511a- 49bf-9d22-8da014c76cc2,networkType:3,controllerIp:10.255.654.​​22,redirectType:0,...}

这就是返回的内容......完美,但这是在控制台日志中:

未找到数据:未定义

有什么想法吗?

再次更新:

好的,这就是我现在得到的:

0: {id:23ef0d23-0d8d-4466-98da-81ef30791773, networkType:1, controllerIp:10.255.135.22, redirectType:0,…} 1: {id:8e2822b1-49a8-498e-979b-2849cfa82148, networkType:1, controllerIp:10.255.150.24, redirectType:0,…} 2: {id:678b4a01-a6a6-449f-966d-c50c74964729, networkType:2, controllerIp:10.255.150.22, redirectType:0,…} 3: {id:b4b46748- 511a-49bf-9d22-8da014c76cc2,networkType:3,controllerIp:10.255.654.​​22,redirectType:0,…}

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

未找到数据:未定义返回值:
空无属性

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

但我相信你在正确的轨道上,到目前为止......谢谢,让我们继续

4

1 回答 1

4

这里有几个问题:

  1. 没有同步 JSONP 这样的东西。(嗯,一些较旧的浏览器曾经有办法做到这一点,但它们在很大程度上已得到修复。)您可以使用 JSONP,也可以进行同步 ajax 调用,但不能同时使用这两种方法。因此,您的函数不可能_getInfo将数据作为返回值返回。(你也错过了return试图这样做的声明。)

    相反,删除async: false(无论如何它都被忽略了)并将回调函数传递给_getInfo

    _getInfo(networksURL, function(data) {
        console.log("Return Value: " + data);
    });
    
  2. 您不需要JSON.parse与 JSONP 一起使用。JSONP 的本质是在你看到它的时候它已经被反序列化(解析)了。

  3. 您正在寻找data.responseText,但success函数接收的参数不是 XHR 对象,而是data。从中删除.responseText

总而言之,一个最小的更新:

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);
    });
}); 

分别:那个命名的函数表达式:

var _getInfo = function getInfo() {
    // ...
};

...是一个有点先进的结构。如果你不是 100% 确定你需要它,我可能只是使用一个声明:

function getInfo() {
    // ...
}

(无论有没有_名字开头的,你的电话。)

于 2013-11-04T16:29:22.990 回答