2016-12-15 11 views
0

私のJSPページには、4つの項目が含まれた食品の配列が含まれています。Ajaxレスポンスの出力

ユーザーが配列内にあるテキストボックスに食品名を入力すると、見つかったかどうかを示す4つの文字列が出力されます。

アレイ内の食品の位置によっては、それぞれの文字列で実際の回答が得られます。入力された食品が配列の4番目の要素であれば、AJAXによって書かれた4番目の文字列が正しい答えを返します。

私のスクリーンショットは、入力された値がサモサパヴである場合の出力を示した問題

を示し、2番目の文字列は、右の出力を提供します。第四文字列はので、私はその一つだけと確実にするために必要な変更は何右の出力に

showing the output in case the value entered is misalPav,the fourth string gives the right output

を与え、入力された値がmisalPavある場合の出力を示す

eg showing the output in case the value entered is Samosa Pav,the second string gives the right output

正しい出力がAJAXコールから受信されますか?

var request; 
 

 
function sendInfo() { 
 
    var v = document.getElementById("userInput").value; 
 
    var url = "index.jsp?food=" + v; 
 

 
    if (window.XMLHttpRequest) { 
 
    request = new XMLHttpRequest(); 
 
    } else if (window.ActiveXObject) { 
 
    request = new ActiveXObject("Microsoft.XMLHTTP"); 
 
    } 
 

 
    if (request.readyState == 0 || request.readyState == 4) { 
 
    try { 
 
     request.onreadystatechange = getInfo; 
 
     request.open("GET", url, true); 
 
     request.send(); 
 
    } catch (e) { 
 
     alert("Unable to connect to server"); 
 
    } 
 
    } 
 
} 
 

 
function getInfo() { 
 
    if (request.readyState == 4) { 
 
    if (request.status == 200) { 
 
     var val = request.responseText; 
 
     document.getElementById('underInput').innerHTML = val; 
 
    } 
 
    } 
 
} 
<!DOCTYPE html> 
 
<!-- 
 
To change this license header, choose License Headers in Project Properties. 
 
To change this template file, choose Tools | Templates 
 
and open the template in the editor. 
 
--> 
 
<html> 
 

 
<head> 
 
    <script type="text/javascript" src="food.js"> 
 

 

 
    </script> 
 
</head> 
 

 
<body> 
 
    <h3>The Chuff Bucket</h3> 
 
    Enter the food you want to order 
 

 
    <input type="text" id="userInput" name="input" onkeyup="sendInfo()"></input> 
 

 
    <div id="underInput"></div> 
 

 
</body> 
 

 
</html>

%-- 
Document : index 
Created on : 15 Dec, 2016, 7:07:55 PM 
Author  : KRISHNAJI 
--%> 

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>JSP Page</title> 
</head> 
<body> 
<% 
    String food = request.getParameter("food"); 
    String foodArray[] = {"Vada Pav", "Samosa Pav", "Pav Bhaji", "Misal Pav"}; 

    for(int i = 0; i < foodArray.length; i++) 
    { 
    if(food.equalsIgnoreCase(foodArray[i])) 
    { 
     out.println("Hey we do have " + food); 
    } 
    else if (food == "") 
    { 
     out.println("Enter a food"); 
    } 
    else 
    { 
     out.println("We don't have " + food); 
    } 
    } 
%> 
</body> 
</html> 




[1]: https://i.stack.imgur.com/sBHnZ.jpg 
[2]: https://i.stack.imgur.com/Xv7fG.jpg 
+0

おそらく、あなたのプリントの後にブレークステートメントを置くことができます。この見た目は、アレイ全体で4つのアイテムすべてを繰り返し、各アイテムごとに1回印刷します。 – detellda

+0

Thanks Douglas、if else ifのprint文の後にbreakを使用してください。そうでない場合は、テキストボックスが空白の場合、または配列の最初の項目を入力した場合にのみ正しい出力が得られます。 .jspファイルをうまく編集します。 – krrish

答えて

0

私はちょうどここで重要なのビットを編集します:私のコメントで私はあなたの元のループ内の他のすべての条件がまだ印刷されていることを忘れて、

String food = request.getParameter("food"); 
String foodArray[] = {"Vada Pav", "Samosa Pav", "Pav Bhaji", "Misal Pav"}; 

int i = 0; 

for(i = 0; i < foodArray.length; i++) 
{ 
    if(food.equalsIgnoreCase(foodArray[i])) 
    { 
    out.println("Hey we do have " + food); 
    break; 
    } 
    else if (food == "") 
    { 
    out.println("Enter a food"); 
    break; 
    } 
} 

if(i >= foodArray.length) 
{ 
    out.println("We don't have " + food); 
} 

右をelse文が原因です。だから私は今あなたのカウンタをループの外に宣言し、ループが終了した後の配列の長さと比較します。そうすれば、入力した食品が見つからなければ、最後に1回だけ印刷されます。入力が空白の場合、または食品と一致する場合、条件が満たされ、正しい応答が印刷されます。カウンタはインクリメントを停止し、配列の長さよりも短くなり、最後の条件に失敗し、正しい応答のみが残されます。これはあなたの質問に完全に答えるはずです。

+0

ありがとうございました、 – krrish