2015-12-21 119 views
0

我使用ajax请求从html表单向后端的java web服务发送json字符串。检查Ajax请求格式是否正确

HTML代码 ..

<!DOCTYPE html> 
    <html> 
    <head> 
    <meta charset="ISO-8859-1"> 
    <title>Requests form</title> 
    <script type="text/javascript" src="../js/jquery-1.11.3.min.js"></script> 
    <script type="text/javascript"> 
    var ItemId = null; 
    var UserId = null; 
    var Token = null; 

    submit1 = function() { 
    alert("Inside submit function"); 
    Token = document.getElementById("itemId").value; 
    UserId = document.getElementById("userId").value; 
    var req = { 
      requestoruserId: UserId, 
      token: Token, 

    } 
    send(req); 
    }; 

    send = function(req) { 
    alert("Inside send function."); 
    alert(JSON.stringify(req)); 
    $.ajax({ 
     url: '/flsv2/GetRequestsByUser', 
     type:'GET', 
     data: JSON.stringify(req), 
     contentType:"application/json", 
     dataType: "json", 

     success: function(response) { 
      alert("working"); 
      document.getElementById("Id").value = response.token; 
      document.getElementById("Code").value = response.Title; 
      document.getElementById("Message").value = response.Desc; 
      document.getElementById("itemId1").value = response.RequestId; 
      document.getElementById("userId1").value = response.Owneruserid; 
      document.getElementById("date").value = response.Date; 

      /*if(parseInt(response.Code) === 27 || parseInt(response.Code) === 28) { 
       obj = JSON.parse(response.Message); 
       document.getElementById("itemId1").value = obj.itemId; 
       document.getElementById("userId1").value = obj.userId; 
       document.getElementById("Message").value = obj.date 
      } 
      else{ 
       document.getElementById("Message").value = response.Message 
      }*/ 
      }, 

      error: function() { 
      alert("not working"); 
      //alert(data); 
      } 
      }); 
      }; 

      </script> 
      </head> 
      <body> 
      <h1>My Requests FORM</h1> 
      <form> 
      Request Token Id : <input type="text" name="itemId" id="itemId"> <br/><br/> 
      Request User Id : <input type="text" name="userId" id="userId"><br/><br/> 
      <input type="button" value="Submit" onclick="submit1()"> 
      <h1>OUTPUT</h1> 
      token : <input type="text" name="Id" id="Id"><br/><br/> 
      title : <input type="text" name="code" id="Code"><br/><br/> 
      Description : <input type="text" name="message" id="Message"><br/><br/> 
      Request Id : <input type="text" name="itemId1" id="itemId1"><br/><br/> 
      Owner Id : <input type="text" name="userId1" id="userId1"><br/><br/> 
      Request Date : <input type="text" name="date" id="date"><br/><br/> 
      </form> 
      <br/> 
      <h3><A href="index.html">INDEX</A></h3> 
      </body> 
      </html> 

但每次我点击提交按钮,我得到了错误警报说“不工作”。浏览器控制台,它说以下..

console

上我认为错误是因为JSON请求的格式不正确。有没有一种方法来检查json字符串的get()方法是否正确?

+1

在Chrome开发工具中检查您的“网络”选项卡,您可以在那里看到您的请求标头。 – abhishekkannojia

+3

服务器端脚本('/ flsv2/GetRequestsByUser')出现错误。您已发布客户端代码。没有什么我们可以真正帮助... –

+0

1)检查控制台中的请求状态2)检查服务器上的日志3)将jQuery给你的参数添加到'error'处理程序和'console.log'中以查看更多信息。确实,这可能是由错误的数据发送引起的,但错误发生在服务器上,所以这是您需要启动调试跟踪的地方。 –

回答

-1

我想你想的网址是 '/ flsv2/GetRequestsByUser?requestoruserId = whateverId &令牌= whateverToken'

$.ajax({ 
 
     url: '/flsv2/GetRequestsByUser', 
 
     type:'GET', 
 
     //data: JSON.stringify(req), 
 
     params: req, // instead of data... 
 
     contentType:"application/json", 
 
     dataType: "json" 
 
     });

+0

我仍然得到相同的错误..背后使用param而不是数据的任何理由?我见过的所有示例都使用了数据.. – Lucy

+0

是的,我没有在文档中看到任何'params'选项。 –

-1

您需要将对象发送到的 “数据” 参数ajax呼叫。更改数据参数如下所示:?

$.ajax({ 
     url: '/flsv2/GetRequestsByUser', 
     type:'GET', 
     //data: JSON.stringify(req), 
     data: {"request": JSON.stringify(req)}, 
     contentType:"application/json", 
     dataType: "json" 
}); 

这将在您的网址像生成查询字符串参数:

/flsv2/GetRequestsByUser请求= STRINGIFIED_JSON_OBJECT

+0

仍然收到相同的错误。任何发送对象的具体原因? – Lucy

+0

没有迹象表明web API接受一个JSON字符串的“request”参数。 –

0
data: JSON.stringify(req) 

不字符串化它! jQuery的AJAX API在这里期待一个实际的对象,而不是一个JSON字符串。它接受对象并从中构建HTTP查询字符串。它不能从你的数据的JSON字符串版本那样做。

您可以从错误消息中看到HTTP请求是而不是您希望它是什么。

这并不能告诉你如何检查AJAX请求的格式是否正常(检查成功确实是唯一的方法,因为服务器端API可以是任何东西),但它确实告诉你如何解决这方面的问题:

data: req 

这是一个耻辱的后端服务是给你一个“内部服务器错误”:表示一个错误,因为这不是一个恶意请求正确的错误代码。

+0

即使从chrome中删除所有缓存的文件后,我仍然在chrome控制台中得到相同的错误。 – Lucy

+0

@Lucy:在完全更改请求数据格式后,“仍然出现相同的错误”是不可能的。仔细阅读它,因为它已经改变。并研究您正在使用的后端API的文档,以了解请求的外观。 –

+0

@Lucy:我不打算为你调试你的整个Java后端......正如我所说的,你需要阅读它的文档以找出请求的外观。将它与您的请求_does_的外观进行比较。 –