如何在没有标题的情况下提取响应内容(仅限正文)?使用Jquery

时间:2013-07-12 21:41:05

标签: javascript jquery ajax httpresponse

如何在没有标题的情况下提取响应内容(仅限正文)?

$.ajax({ 
   type: "GET",
   url: "http://myRestservice.domain.com",
   success: function(data, textStatus, request){
        alert(data); //This prints the response with the header.

   },
   error: function(){
     alert('fail');

   }
  });

上面的代码打印

HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 12 Jul 2013 20:24:06 GMT
Content-Length: 232

    <?xml version="1.0" encoding="utf-8"?>
    <string xmlns="http://tempuri.org/">{"UserID":3,"RoleID":8,"ActivityID":3,"RoleIName":"E",,"Duration":10,"ValidationMsg":"Passed"}</string>

我需要提取ValidationMsg的值。这是一个休息服务电话。

如何在没有标题信息的情况下获得响应?

3 个答案:

答案 0 :(得分:4)

我认为您的服务器正在提供您不期望的内容类型。

要解决的步骤:

  • 在chrome的开发人员工具中打开网络选项卡,观察请求发生并阅读其传递的内容类型。我打赌,它类似于text/plaintext/html
  • 对于JSON,您的服务器应将其作为application/json传递。
  • 您的ajax请求应将dataType指定为“json”。通常$ .ajax适当地猜测;但是,由于您的服务器声称它是某种文本,因此您的回复中会出现标题。

答案 1 :(得分:2)

如果您在 data 参数中找回标题,我怀疑您的服务器代码有问题。您提供的代码可以很好地连接到返回有效XML的测试服务器 - data 参数最终包含XML文档对象。

我建议您尝试在浏览器中打开该网址并查看其返回的内容。此外,如果在服务器上以编程方式生成XML,您可以尝试仅创建一个静态XML文件,看看它是否更好。

让服务器返回有效的XML后,您可以在 data 参数中从XML对象中提取字符串内容,如下所示:

var stringContent = $(data).text();

然后,您可以使用以下命令解析该字符串内容中的JSON:

var json = $.parseJSON(stringContent);

最后用:

提取 validationMessage
var validationMessage = json.ValidationMsg;

这假设该字符串元素中的JSON是有效的json。但是,在您给出的示例中,“RoleIName”和“Duration”之间有一个双逗号,使其无效。

如果你无法在服务器端解决这个问题,你可以在客户端用一个简单的字符串替换来修复它:

stringContent = stringContent.replace(',,', ',');

这通常不是特别安全的事情,但是如果你不担心json内容中的逗号可能会被这样的调用破坏,那么它应该不是问题。

总而言之,最终的成功功能看起来应该是这样的:

success: function(data, textStatus, request){
   var stringContent = $(data).text();
   stringContent = stringContent.replace(',,', ',');
   var json = $.parseJSON(stringContent);
   var validationMessage = json.ValidationMsg;
   /* do whatever you need with the validationMessage here */
},

这是一个展示工作脚本的codepen链接:http://codepen.io/anon/pen/LeDlg

答案 2 :(得分:0)

我的想法是尝试在ajax调用中使用contentType:

$.ajax({ 
   type: "GET",
   url: "http://myRestservice.domain.com",
   **contentType: "application/json",**
   success: function(data, textStatus, request){
        alert(data); //This prints the response with the header.

   },
   error: function(){
     alert('fail');

   }
  });

然后尝试捕获json对象