2013-11-09 58 views
3

我正在使用angularjs的$ http服务将数据发布到我的API。它的伟大工程..直到我添加和(例如JSONRequest)等号数据的内容

var request = { 
    'method': 'POST', 
    'url': API_URL + apiActionName, 
    'data': JSONRequest, 
    'withCredentials': true, 
}; 
$http(request). 
success(function(data, status, headers, config) { 
    // handle success 
}). 
error(function(data, status, headers, config) { 
    // handle error 
} 

这个工程的数据包含以下JSONRequest

{ 
    'text':'this is some text' 
} 

然而,当数据包含此

{ 
    'text':'this is = some text' 
} 

该请求被转义并且服务器无法对POST做任何事情!它似乎与所有其他角色一起工作。

任何帮助将不胜感激!谢谢

+0

这很奇怪。试试双引号也许吧? –

回答

1

它必须与URI编码。获得发送较低级AJAX API的字符串不是uri编码的。这意味着,当它看到帖子中的=号时,它假定用uri编码解析它。

由于JSONRequest最初是在var request上面的行上定义的,所有这些信息可能都不存在以回答此问题。对于那个很抱歉。它被定义如下:

var JSONRequest = { 
    'JSON': requestObject; 
} 

其中requestObject是

{ 
    'text':'this is = some text' 
} 

我结束了URI编码的JSON请求如下

var JSONRequest = 'JSON=' + encodeURIComponent(JSON.stringify(requestObject)); 

这解决了问题,使我的API调用更多对HTTP协议强大。

感谢您的帮助!

+0

顺便说一句,JSON =有作为API接受的包装对象 – Aaron

+0

这是唯一适用于我的东西。 – TrtG

1

我总是使用JSON.Stringify()为我的POST有效载荷。

+0

如果不通过JSON字符串,angular会在内部做相同的处理。'http.js'检查对象并使用内部'toJson'方法调用JSON.stringify https://github.com/angular/angular.js/ blob/master/src/Angular.js#L935 – charlietfl

+1

在JSON.stringify()中,stringify应该是小写。 – TrtG