我的UI和服务器数据交换运行良好,但我想开始使用Frisby.js测试新的开发。 UI有一个使用jQuery的JavaScript表单管理器。我的请求体是一个首先使用JSON.stringify序列化的JavaScript对象。
var msg = {form:"login",data{username:"elmer",password:"wabbit"}};
var json_msg = JSON.stringify(msg);
然后由jQuery发送:
$.ajax(
url: baseUrl+"forms/"+call,
data: { req: json_msg },
type: "POST",
success: function(msg){...
服务器上收到的原始内容如下所示:
req=%7B%22form%22%3A%22login%22%2C%22data%22%3A%7B%22username%22%3A%22elmer%22%2C%22password%22%3A%wabbit%22%7D%7D
由于这个原始内容是我的服务器期望和成功使用的内容,我尝试了几种内容类型标题和内容格式的组合,但是Frisby.js会对它们产生阻塞或发送错误的主体。
注意: 1.首先必须序列化消息(JavaScript对象)。 2.然后req = [serialized_message]必须是URIencoded。 使用jQuery.ajax()可以很容易地执行这两个步骤,但看起来很简单 Frisby.js不可能
我试过了: 使用反序列化的JavaScript对象, 使用序列化的JavaScript对象和 序列化和URIencoded文本(如下所示)
msg = "%7B%22form%22%3A%22login%22%2C%22data%22%3A%7B%22username%22%3A%22elmer%22%2C%22password%22%3A%wabbit%22%7D%7D";
frisby.create('Login on HHHLEG web site.')
.addHeader('X-Requested-With', 'XMLHttpRequest')
.post('http://hhhleg/forms/login', req=msg )
上面的代码在到达服务器时最终没有任何内容。我怀疑存在一些简单的语法问题或内容类型问题,或者Frisby.js无法执行序列化和URI编码的组合,因为它会对所涉及的字符产生影响。
答案 0 :(得分:0)
Frisby可能需要一个JSON编码的请求体,而不是jQuery的默认application/x-www-form-urlencoded
。
尝试设置contentType
:
$.ajax({
url: baseUrl+"forms/"+call,
data: { req: json_msg },
type: "POST",
contentType: "application/json",
// other properties...
});
答案 1 :(得分:0)
在类似的问题上对我有帮助:
1.创建具有所需名称的变量(在您的情况下为“req”)并使用msg内容发送它
2.使用不是普通的frisby js post构造函数,但是遵循:
...
frisby.create('Send valid data in post')
.post(YourPath,
req, //before it we need to assign to it value by
//"var req = msg" or any byte array
{
json: false,
headers: {
"content-type": "application/octet-stream",
"Authorization": your.authToken //if needed
}
})
.expectStatus(200)
...
在我的情况下,我尝试发送图像字节数组,但遇到类似URLencoded消息和JSON格式发送请求的问题。
如果它没有帮助或者似乎不是您的情况 - 您可以访问https://github.com/vlucas/frisby/tree/legacy-0.x/examples页面以获取有关数据发送的POST请求的更多示例。