【问题标题】:How to use a JSON object received by one JavaScript function in another function?如何在另一个函数中使用一个 JavaScript 函数接收到的 JSON 对象?
【发布时间】:2011-03-25 04:23:59
【问题描述】:

我编写了一个通过 ajax 调用返回 JSON 格式的函数。 JSON 是

 {
    "communication": [{
        "communication_name": "None",
        "communication_id": "1"
    }],
    "hardware": [{
        "hardware_name": "XXXXXXXX",
        "hardware_id": "6"
    }],
    "Sofware": [{
        "software_name": "XXXXXX",
        "software_id": "3"
    }, {
        "software_name": "XXXXXXXXXXXXX",
        "software_id": "4"
    }]
}

这是获取此响应的 JavaScript 函数:

function getModelData(model_id, model_name){

     var xmlHttp = createXmlHttpRequestObject();

    try {
    xmlHttp.open("GET", "ajaxmodel_new.php?model_id="+model_id,true);
    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4 && xmlHttp.status==200){
        var myJSONObject =  JSON.parse(xmlHttp.responseText)
        //alert(myJSONObject.communication[0].communication_name)
         }
    }
    xmlHttp.send(null);

    } catch (e){
    alert("Can't connect to server:\n" + e.toString());
    }
}

它得到了正确的响应。还有另一个功能是在选定的下拉列表中获取选定的值:

<div id="selected_options">
                <select onchange="test()" id="selected_opt">
                <option value="0" selected>-Select-</option>
                <option value="1">Communication</option>
                             </select></div>
function test() {
    var get_id = document.getElementById('selected_opt');
    var result = get_id.options[get_id.selectedIndex].value;
    alert(result);
}

目标

我需要在 test() 函数中使用 JSON 响应,即 myJSONObject。如何在test() 函数中使用getModelData() ajax 函数中获得的var myJSONObject

【问题讨论】:

  • 有史以来最长的 stackoverflow 语句

标签: javascript ajax json


【解决方案1】:

我在解析 JSON 对象时采用了不同的方法。

从 PHP 端,我创建对象并将其存储在变量中,例如 $JSONvar。现在我echo这个变量。

然后在客户端这就是我拦截对象的方式。

var JsonObject = {};
var http = new XMLHttpRequest();
http.open("GET", url, true); //url is the url echoing the jsonString
http.onreadystatechange = function () {
if (http.readyState == 4 && http.status == 200) {
    var responseTxt = http.responseText;
    myJSONObject = eval('(' + responseTxt + ')');
    test(myJSONObject);
 }
}
http.send(null);

你的测试函数应该可以像这样访问对象,

function test(myJSONObject) {
var object = myJSONObject;
alert(object);
var get_id = document.getElementById('selected_opt');
var result = get_id.options[get_id.selectedIndex].value;
alert(result);
}

【讨论】:

  • 我这里使用的是我们可以将myJSONObject声明为一个全局变量,这样我们就可以在函数内部的任何地方访问它
  • 像这样使用 eval 可能很危险。如果您的网络中的某个人在中间攻击中使用 DNS 人将请求重定向到另一台服务器,他们可以将任意 JavaScript 插入响应中,然后 eval 会运行它。
  • 我想我们可以编写一个函数来清理返回的 json 值以检查注入,然后对其进行评估。
【解决方案2】:

xmlHttp.onreadystatechange 中的函数调用test(),将解码后的对象作为参数传递。

【讨论】:

  • 我没有得到正确的东西你能简单地告诉我或者如何编码吗?
猜你喜欢
  • 2014-04-27
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 2018-08-26
  • 1970-01-01
  • 2021-07-03
相关资源
最近更新 更多