为什么我的服务器代码ajax调用返回一个用双引号括起来的响应?

Yat*_*rix 10 javascript asp.net ajax response

我正在从我的javascript到aspx页面的webmethod进行ajax调用.由于某种原因,我正在返回的字符串用双引号括起来.我试图剥离它们,但替换只是因为某种原因取代了第一个.在服务器端没有包装字符串的引号.

        var req = new XMLHttpRequest();
        var url = document.URL;
        // strip pound sign off the end
        var poundIndex = url.lastIndexOf('#');

        if (poundIndex === url.length - 1) {
            url = url.substring(0, poundIndex);
        }
        url += '/SignOn';
        req.open('post', url, false);
        req.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
        req.send();

        var serverResponse = req.responseText.replace('"', '');
Run Code Online (Sandbox Code Playgroud)

这就是我在服务器上所做的事情:

Return System.Configuration.ConfigurationManager.AppSettings("url").ToString + "?token=" + HttpContext.Current.Session("Token").ToString() + "&aid=ca"
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有任何想法吗?

Bar*_*art 17

首先,如果您担心看到""mystring""而不是"mystring"(双引号而不是单引号),那是因为开发人员控制台会自动在字符串值周围显示引号,如果您的字符串实际包含,这可能会造成混淆"引用"字符.您在控制台中看到的外部引号不在那里,只有内部引号.

接下来,根据JSON规范(http://www.json.org/),JSON字符串以引号开头和结尾.如果要解析json字符串,请使用:

var str = JSON.parse(req.responseText);
Run Code Online (Sandbox Code Playgroud)

如果你只想删除字符串中的所有引号,请尝试

var str = req.responseText.replace(/\"/g, "");
Run Code Online (Sandbox Code Playgroud)

请注意,后者删除了所有引号,包括字符串中间的(转义)引号.

如果您正在使用JSON对象,正如您的响应头(application/json)似乎表明的那样,我强烈建议您使用JSON.parse

  • 只需使用`/(^"|"$)/ g`来修剪开头和结尾的引号 (5认同)