在JavaScript中将字符串转换为JSON文本

在JavaScript中将字符串转换为JSON文本,javascript,jquery,ajax,json,post,Javascript,Jquery,Ajax,Json,Post,我想将JSON转换的数据html代码发送到requestGet Servlet。我的代码是绝对正确的,POST请求被发送到servlet,但我在将字符串转换为JSON时出错 我正在使用myeclipse,当我运行这段代码时,它会显示 JSON是未定义的 但当我将其保存为HTML并在FF上运行时,它既不会显示任何错误,也不会向servlet发送任何请求。请建议我通过POST方法将JSON文本发送到servlet的方法是否正确 <script type="text/javascript" sr

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

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

JSON是未定义的

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

<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";
    }
}
这似乎是myeclipse中的一个bug,它不知道


正如您所说,您的代码是正确的,并且在实现链接标准的Chrome和FF中完美运行。要解决这个问题,您可以使用jQuery库,而使用stringify则需要一个解决方法。

并非所有浏览器都支持原生JSON。例如,IE的一些版本,可能还有myeclipse。考虑使用SIMM,以在非兼容浏览器中添加支持。p> 见鬼。您有jQuery,但您手动创建XHR并使用本机DOM方法—这毫无意义。+1到前面的注释。以及为什么要将序列化表单数据字符串化以便在post请求中使用它。这也没有任何意义。事实上,我从网络上获得了这段代码。请建议我如何将json格式的数据从我的表单发送到servlet。我正在尝试将字符串转换为json,但没有结果,现在我正在使用以下代码:-var str='{Data:'+cdlText+'}';var jText=JSON.stringifyeval+str+;alertCDL::+jText;但它也不起作用,正如ThiefMaster所说,请阅读这些:和。然后尽量不要使用document.createElement、document.findElement*和req=newXMLHttpRequest等方法。请注意发出xhr请求所需的代码量,以及使用jquery所需的代码量。完成此操作后,重新编写您的问题。@HerbertKruitbosch IMHO将一些DOM方法与jQuery混合使用是完全可以的-即使用this.value而不是$this.valOk Bergi谢谢您的回答,我会检查它。不要说谢谢,只要在有价值的时候投票就可以了。然后,在检查之后,当它正确时,您可以接受它。