2014-10-30 161 views
3

我送使用jQueryCodeception - POST生JSON字符串

var url = 'http://site.local/api/package/create'; 
var data = { 
    "command": "package", 
    "commandParameters": { 
    "options": [ 
     { 
     "a": true 
     } 
    ], 
    "parameters": { 
     "node_id": 1111, 
     "node_name": "Node Name" 
    } 
    } 
} 
$.ajax({ 
    url: url, 
    type: "POST", 
    data: JSON.stringify(data), 
    contentType: "application/json", 
    success: function (a, b, c) { 
     // Do something with response 
    } 
}); 

也在做类似使用的东西下面的请求邮差(浏览器插件)

POST 
Content-Type: application/json 
Payload: 
{ 
     "command": "package", 
     "commandParameters": { 
     "options": [ 
      { 
      "a": true 
      } 
     ], 
     "parameters": { 
      "node_id": 1111, 
      "node_name": "Node Name" 
     } 
     } 
    } 

意图是给我寄了原始JSON字符串到我的服务器,而不是让Jquery将其转换为发布数据。 如何执行Codeception一样的,我只是不能看到它的文档中,我只看到下面..

$I->sendAjaxPostRequest('/updateSettings', array('notifications' => true)); 

所以我想我想在Codeception POST请求,同时连接JSON在请求的正文中?

回答

7

encodeApplicationJson功能codeception/src目录/ Codeception /模块/ REST.php检查头“Content-Type”和值“application/json”是否存在。

如果设置返回json_encode($参数),这是一个字符串,这是我想要什么,所以我最终会做这样的事情...

$I->haveHttpHeader('Content-Type', 'application/json'); 
    $I->sendPOST('api/package/create', [ 
     'command' => 'package', 
     'commandParameters' => [ 
      'options' => [], 
      'arguments' => [] 
     ] 
    ]); 
    $I->canSeeResponseCodeIs(200); 
    $I->seeResponseIsJson(); 

之间的差别的一些信息sendpostsendajaxpostrequest

http://phptest.club/t/what-is-the-difference-between-sendpost-and-sendajaxpostrequest/212#post_2

2

我想你应该告诉jQuery不要处理你传递的数据。 试试这个

$.ajax({ 
    url: url, 
    type: "POST", 
    processData: false, 
    data: JSON.stringify(data), 
    contentType: "application/json", 
    success: function (a, b, c) { 
     // Do something with response 
    } 
}); 

在PHP端你可以使用下面的代码来获取原始数据

$rawdata = file_get_contents('php://input'); 
+0

这工作完全适合我,谢谢! – DethRaid 2017-04-15 02:48:25