2017-07-26 88 views
0

我正在使用Extjs 5.1.3。我有使用参数post请求原样请求媒体类型[application/json]错误!请求正文不是Extjs Ajax请求的JSON格式问题

{"root":{"countryId":"458","ruleId":"3386","ruleName":"Test1 \\","ruleType":"CELL_STORE","opType":"DETAILS"}} 

我创建Ajax请求原样

Ext.Ajax.request({ 
         method: 'POST', 
         url: appurl.fetchRuleDetails, 
         params: win.jsonData, 
         callback: function(option, success, response){ 
          }) 
        }) 

从服务器端,响应即将原样

{ 
    "rules":[ 
    { 
     "countryId":"458", 
     "ruleId":"3386", 
     "ruleName":"Test1 \\", 
     "ruleType":"CELL_STORE", 
     "ruleParts":[ 
     { 
      "seq":"1", 
      "attrId":"6", 
      "attrName":"Store Type", 
      "op":"=", 
      "val":"dsafdaf", 
      "charType":"GLOBAL_CHAR" 
     } 
     ] 
    } 
    ], 
    "Status":{ 
    "StatusFlag":true, 
    "StatusCode":"SUCCESS", 
    "StatusMessage":"SUCCESS" 
    } 
} 

但在Ajax请求的回调函数,我们正在接收response.responseText as- 请求媒体类型[application/json]错误!请求正文不是JSON格式。

我的猜测是问题是因为rulename值为“Test1 \”。 那么有人可以帮我什么想念。

+0

这与Ext无关,您的服务器响应它无法读取JSON。 –

回答

1

错误消息不是ExtJS错误消息。如果您收到有关无效JSON的ExtJS的错误,它看起来就像这样:

Uncaught Error: You're trying to decode an invalid JSON String: TestTest

我最好的猜测是错误消息来自服务器,因为它需要你发送请求的JSON。现在你将它作为FormData发送。发送请求的JSON,你必须把你的对象在jsonData配置和离开params配置未定义:

Ext.Ajax.request({ 
    method: 'POST', 
    url: appurl.fetchRuleDetails, 
    jsonData: win.jsonData, 
    callback: function(option, success, response){ 
    }) 
}) 

有关服务器 - 客户端通信未来的问题,请记住,你应该首先检查您的浏览器网络选项卡发送给服务器的内容以及服务器的响应实际上是什么。

+0

谢谢您的回复先生。实际上,我使用chrome的rest客户端插件检查请求和响应...服务器正确地发送响应,正确地以json格式正确。但在Ajax请求的回调函数中,我们正在接收response.responseText as- Request Media Type [application/json]错误!请求正文不是JSON格式。这是奇怪的。如果在我要替换的请求参数中,ruleName从“Test1 \”改为“Test1”,我能够在回调中正确地获得相应的响应。所以根据我,问题是因为使用的特殊字符。我不知道为什么会发生。 – user1761116

+0

@ user1761116您可以制作[小提琴](https://fiddle.sencha.com/)吗? – Alexander