2016-04-16 9 views
1

私のjavascript submit関数でajax呼び出しを行っています。このajax呼び出しでは、配列(globalSelection)をデータとしてサーブレットに渡しています。この配列は関数textSelectionの要素で構成され、下にも貼り付けられます。配列値がAjaxから渡されている間nullになる

globalSelection =[]; 

function submit() { 

    console.log("globalSelection start") 
    console.log(globalSelection) 
    console.log("globalSelection end") 

     $.ajax({ 
      async : false, 
      type : "POST", 
      url : 'http://example.com:8080/myApp/DataServlet', 
      data: {globalSelection:globalSelection}, 
      success : function(data) { 
       alert(data) 
      }, 
      error : function(data, status, er) { 
       alert("error: " + data + " status: " + status + " er:" + er); 
      } 
     }); 

} 

function textSelection(range, anchorNode, focusNode) { 
    this.range = range; 
    this.type = 3; 
    this.rCollection = []; 
    this.textContent = encodeURI(range.toString()); 
    this.anchorNode = anchorNode; 
    this.focusNode = focusNode; 
    this.selectionId = getRandom(); 
    this.yPOS = getYPOS(); 

    this.getTagName = function(range) { 
     var el = range.startContainer.parentNode; 
     return el; 
    } 
    this.getTagIndex = function(el) { 
     var index = $(el.tagName).index(el); 
     return index; 
    } 

    this.simpleText = function(node, range) { 
     if (!node) 
      var entry = this.createEntry(this.anchorNode, this.range); 
     else 
      var entry = this.createEntry(node, range); 
     this.rCollection.push(entry); 
     this.highlight(this.rCollection[0].range); 
     this.crossIndexCalc(); 
     textSelection._t_list.push(this); 
     pushto_G_FactualEntry(this); 
    } 

    this.compositeText = function() { 
     this.findSelectionDirection(); 
     var flag = this.splitRanges(this.anchorNode, this.focusNode, 
       this.range.startOffset, this.range.endOffset); 
     if (flag == 0) { 
      for (j in this.rCollection) { 
       this.highlight(this.rCollection[j].range); 
      } 
     } 
     this.crossIndexCalc(); 
     textSelection._t_list.push(this); 
     pushto_G_FactualEntry(this); 
    } 

} 

下記のブラウザコンソールの画面が表示され、globalSelection(配列)が表示されます。私のサーブレットで

enter image description here

String[] arrays = request.getParameterValues("globalSelection[]"); 
System.out.println(arrays); 

ここで私は、配列にnull値を取得していますが、次のように私は、この配列を取得しています。

サーブレットへの簡単なテストのためにsubmit関数でglobalSelectionを次のように置くと、配列を取得できます。

var globalSelection = ["lynk_url", "jsonBody", "lynk_dummy1", "lynk_dummy2", "lynk_name", "lynk_desc", "lynk_flag"]; 

私の実際のglobalSelectionがサーブレットでnullを表示する理由は、ここで間違っています。

+0

Javaサーバーにはどのようなタイプがありますか?私の推測では、あなたはString []を取得しようとしていますが、実際にはtextSelection []を送信しています。 textSelectionのどのフィールドをバックエンドで受け取りたいですか?バックエンドにフレームワークを使用していますか?なぜなら、オブジェクトの配列を送信するのは簡単ではないからです(バックエンドでオブジェクトを再構成する必要があるためです)。 –

+0

@ tudor.gergelyサーブレットとJSPのみを使用しています。フレームワークではありません。この配列からサーブレットまでのすべてのフィールドが必要です。次に、json変換を行い、DBに格納します。 –

答えて

0

お試しください: String [] arrays = request.getParameterValues( "globalSelection"); System.out.println(配列);

という名前のパラメータが「globalSelection」という名前でサブミットされたため、「[]」記号が送信されなかったためです。

0

私はあなたの問題を見て、私は単純な解決策を持っています。

私はあなたがJSで文字列としての配列を変換し、その場合にはお勧めします。

JSON.stringify(globalSelection) 

、その後のようなJSON変換用ライブラリのいくつかの並べ替えを使用してバックエンド上のオブジェクトを再構築:https://code.google.com/archive/p/json-simple/

JSONArray globalSelection = (JSONArray) new JSONParser().parse(request.getParameter("globalSelection")); 
    Iterator i = globalSelection.iterator(); 

    while (i.hasNext()) { 
     JSONObject selection = (JSONObject) i.next(); 
     String type = (String)selection.get("type"); 
     System.out.println(type); 
    } 

これは、配列を解析して選択タイプを印刷します。試してみてください。

+0

しかし、SafariはこのJSON.stringify(globalSelection)を受け入れていません... Plsは私の質問を参照してくださいhttp://stackoverflow.com/questions/36640582/how-to-make-ajax-call-with-array-and-string-パラメーター/。私はSafariでこれを行う方法を見つけることができませんでした。だから私はバックエンドに配列としてこれを送るために探しています。 –

関連する問題