2012-05-28 51 views
0

我想將JSON轉換後的數據(html代碼)發送到requestGet Servlet。我的代碼是絕對正確的,其中POST請求發送到servlet,但在將字符串轉換爲JSON時出現錯誤。將字符串轉換爲JavaScript中的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"; 
    } 
} 
+7

究竟是什麼。你有jQuery,但你手動創建XHR並使用本地DOM方法 - 這是沒有意義的。 – ThiefMaster

+2

+1以前的評論。以及爲什麼你串行化的表單數據在你的'post'請求中使用它。這也沒有任何意義。 – VisioN

+0

實際上,我從網絡獲得這個代碼,請建議我如何從我的表單發送json格式的數據到servlet。我試圖將字符串轉換爲json,但沒有結果是現在我使用此代碼: - var str ='{「Data」:'+ cdlText +'}'; var jText = JSON.stringify(eval('('+ str +')')); alert(「CDL ::」+ jText);但它也不起作用 – ConceptSpecs

回答

0

這似乎是在MyEclipse的一個錯誤,這不知道The JSON Object。如你所說,你的代碼是正確的,並且在實現鏈接標準的Chrome和FF中完美運行。要解決這個問題,你可以使用你的jQuery庫中的parseJSON,並使用stringify你需要一個解決方法,如jQuery misses a stringifyJSON method

+0

好Bergi感謝您的回答,我會檢查它。 – ConceptSpecs

+1

不要說「謝謝」,只要在值得的時候提供答案。然後,在檢查之後,您可以在正確時接受它。 – Bergi

0

並非所有瀏覽器都具有本機JSON支持。例如一些版本的IE,可能是myeclipse。考慮使用諸如Douglas Crockford's JSON2之類的墊片在不兼容的瀏覽器中添加支持。

+0

謝謝瑞安我想你是對的,我正在檢查它。 – ConceptSpecs