【问题标题】:Converting a string to JSON text in JavaScript在 JavaScript 中将字符串转换为 JSON 文本
【发布时间】:2012-05-28 10:41:52
【问题描述】:

我想将 JSON 转换后的数据(html 代码)发送到 requestGet Servlet。我的代码在将 POST 请求发送到 servlet 时是绝对正确的,但是在将字符串转换为 JSON 时出现错误。

我正在使用 myeclipse,当我运行此代码时,它会显示

“JSON 未定义”

但是当我将它保存为 HTML 并在 FF 上运行时,它既不显示任何错误也不向 servlet 发送任何请求。请建议我的方法对于通过 POST 方法向 servlet 发送 JSON 文本是否正确。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="http://www.json.org/json2.js"></script>
<SCRIPT language="javascript">

var counter=0;
var controls=new Array();
function add(type) {
    //Create an input type dynamically.
    var element = document.createElement("input");

    //Assign different attributes to the element.
    element.setAttribute("type", type);
    element.setAttribute("value", type);
    element.setAttribute("name", type);
    element.id=type+counter;
    controls[counter]=element.id;
    counter++;
    var foo = document.getElementById("fooBar");
    foo.appendChild(element);
}

function save(){
    var data="";
    var formTitle="Form1";
    var method="post";
    data="<HTML><HEAD><TITLE>"+formTitle+"</TITLE></HEAD><BODY><FORM METHOD="+method+"/>";
    for(i=0;i<controls.length;i++){
    var element=document.getElementById(controls[i]);
    data+="<INPUT type=button id="+element.id+" value="+element.getAttribute("value")+"/>";
    }
    data+="</FORM></BODY></HTML>";
    alert("Data::"+data);
    DoSelectRecommendation(data);

} 

/*
 * code for sending request to the servlet.
 */
$(function() {
       var frm = $(document.myform);
       var dat = JSON.stringify(frm.serializeArray());
       alert("I am about to POST this:\n\n" + dat);

       $.post(
         frm.attr("action"),
         dat,
         function(data) {
           alert("Response: " + data);
         }
       );
     });
var req;
function DoSelectRecommendation(Text) {
if(window.XMLHttpRequest && !(window.ActiveXObject)) {  
        try {  
            req = new XMLHttpRequest();  
        } catch(e) {  
            req = false;  
        }  

    } else if(window.ActiveXObject) {  

        try {  
            req = new ActiveXObject("Msxml2.XMLHTTP");  
        } catch(e) {  
            try {  
                req = new ActiveXObject("Microsoft.XMLHTTP");  
            } catch(e) {  
                req = false;  
            }  
        }  
    } 

 var url="http://localhost:8080/TestForJsp/requestGet";
 req.open("POST",url,true);
 req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
 req.send(Text);
 req.onreadystatechange = inserter;
}

function inserter() {
if (req.readyState == 4) {
    if (req.status == 200) {
        var msg = req.responseText;
        alert("msg = "+msg);
        if (msg == "") {
            document.getElementById("msg1").innerHTML = "<div style=\"color:red\">"+"COS NIE TAK"+"</div>";
            //document.getElementById("msg1").value = "blabla";
        }
        else
            document.getElementById("msg1").innerHTML = "<div style=\"color:red\">"+msg+"</div>";
            //document.getElementById("msg1").value = "COOOO JEST";
    }
}

【问题讨论】:

  • 什么鬼。您有 jQuery,但您手动创建 XHR 并使用本机 DOM 方法 - 这没有任何意义。
  • +1 到上一条评论。以及为什么要对序列化的表单数据进行字符串化以便在 post 请求中使用它。这也没有任何意义。
  • 实际上我从网上得到了这段代码,请建议我如何将 json 格式的数据从我的表单发送到 servlet。我正在尝试将字符串转换为 json,但现在没有结果我正在使用此代码:- var str = '{"Data":'+cdlText+'}'; var jText=JSON.stringify(eval('(' + str + ')')); alert("CDL::"+jText);但它也不起作用
  • 正如 ThiefMaster 所说,请阅读以下内容:api.jquery.com/jQueryapi.jquery.com/jQuery.ajax。然后尽量不要使用像 document.createElement、document.findElement* 和 req = new XMLHttpRequest() 这样的方法。请注意发出 xhr 请求所需的代码量,以及使用 jquery 所需的代码量。完成此操作后,重新提出您的问题。
  • @HerbertKruitbosch 恕我直言,将一些 DOM 方法与 jQuery 混合使用是完全可以的 - 即使用 this.value 而不是 $(this).val()

标签: javascript jquery ajax json post


【解决方案1】:

并非所有浏览器都支持原生 JSON。例如,某些版本的 IE,可能还有 myeclipse。考虑使用诸如Douglas Crockford's JSON2 之类的填充程序来添加对不兼容浏览器的支持。

【讨论】:

    【解决方案2】:

    这似乎是 myeclipse 中的一个错误,它不知道 The JSON Object

    正如您所说,您的代码是正确的,并且可以在 Chrome 和 FF 中完美运行,它们实现了链接标准。要解决此问题,您可以使用 jQuery 库中的 parseJSON,使用 stringify 您需要使用 jQuery misses a stringifyJSON method 的解决方法。

    【讨论】:

    • 好的,Bergi 谢谢你的回答,我会检查的。
    • 不要说“谢谢”,只要在值得的时候投票。然后,核对无误后就可以接受了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2016-05-03
    • 1970-01-01
    相关资源
    最近更新 更多