如何从本地url将JSON设置为变量

How can I set JSON into a variable from a local url

本文关键字:JSON 设置 变量 url      更新时间:2023-09-26

显然jQuery让我变笨了。

我有一个本地url,提供原始JSON,我不知道如何从我的方法中使用JSON而不使用jQuery。

这是我如何知道用jQuery做的

var myJson;
$.getJSON('/local/path/to/json', function (data) { 
    myJson = data; 
});
// Now I can use myJson in a method.

要从服务器检索JSON字符串,请使用本参考中描述的XMLHttpRequest对象:

http://developer.mozilla.org/en/XMLHttpRequest

你会发现它涉及到所有你需要考虑和检查的看不见的事情。因此像jQuery这样的库。

将JSON字符串转换为javascript对象,使用JSON.parse()。这里是参考:

http://developer.mozilla.org/En/Using_native_JSON

下面是一个例子:

function readJSON(file) {
    var request = new XMLHttpRequest();
    request.open('GET', file, false);
    request.send(null);
    if (request.status == 200)
        return request.responseText;
};
var myObject = JSON.parse(readJSON('/local/path/to/json'));

编辑#2:谢谢你在这个例子中的编辑,Chase。警告你一句。在第三部分使用false使open()方法成为同步调用并不是一个好主意。AJAX是专门为异步使用而设计的,而进行同步调用会引起锁定。作为一个曾经认为有同步调用的地方的人,我现在发现总是有更好的方法来完成异步调用。给你一句忠告

请看看下面的代码将在所有浏览器上,谢谢

    function getJSONData(jsonurl) {
        var req = null;
        if (window.XMLHttpRequest) {
            req = new XMLHttpRequest();
        }
        else if (window.ActiveXObject) {
            try {
                req = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e) {
                try {
                    req = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e) { }
            }
        }
        req.open('GET', jsonurl, false);
        req.send(null);
        return req.status == 200 ? req.responseText : 'Error occurred';
    }
    var jsonData = JSON.parse(getJSONData('/local/path/to/json'));
    alert(getJSONData('/local/path/to/json'));

希望这将是非常有用的,谢谢你的时间

如果你熟悉jQuery,这是$.ajax的一个直接替代品:

脚本:

function ajax( uri, settings ) {
    var ajax = new window.XMLHttpRequest(),
        data = settings.type == 'GET' ? '' : settings.data,
        async = settings.async ? settings.async : false;
        uri = settings.type == 'GET' ? uri + ( settings.data ? '?' + settings.data : '' ) : uri;
    ajax.onreadystatechange = function () {
        if ( ajax.readyState == 4 ) { //response ready
            if ( ajax.status == 200 ) { //success
                if ( settings.success ) settings.success( ajax.responseText, ajax.statusText );
                if ( settings.complete ) settings.complete( ajax, ajax.statusText );
            } else {
                if ( settings.error ) settings.error( ajax, ajax.status, ajax.statusText );
            };
        };
    };
    ajax.open( settings.type, uri, async );
    if ( settings.headers ) {
        for ( var header in settings.headers ) {
            ajax.setRequestHeader( header, settings.headers[header] );
        };
    };
    ajax.send( data );
};

就像jQuery一样调用它:

ajax( '/local/path/to/json', {
    "type": "GET", //or "POST"
    //"data": "<query string>", //if POST
    "success": function ( data, status ) {
        var myJson = window.JSON.parse( data );
    },
    "error": function ( response, status, error ) {
        // handle error
    }
} );