我正在尝试创建OTRS票证。
网络服务类型HTTP:REST。
var data = {
Ticket: {
Title: "123123",
TypeID: "2",
QueueID: "1",
State: "open",
PriorityID: "2",
ServiceID: "1"
},
Article: {
Subject: "123123",
Body: "Trololo",
ContentType: "text/plain; charset=utf8"
},
SessionID: 123
};
$.ajax({
url: url,
type: 'POST',
dataType: 'json',
data: JSON.stringify(data),
success: function(res) {
...
},
error: function(res) {
...
}
});在提交之后,我得到了一个错误:Could not read input data。
如果我尝试更改方法以获取并将数据类型更改为JS obj,则会得到另一个
error:
ErrorCode:"TicketCreate.MissingParameter"
ErrorMessage:"TicketCreate: Ticket parameter is missing in or not valid!"我做错了什么?
发布于 2018-04-16 16:07:10
这是因为CORS;这基本上意味着不允许从浏览器向任何URL发送POST请求。如果您想被允许这样做,您必须更改您的web服务器配置。
顺便说一下,您很可能希望从服务器端将请求发送到OTRS REST API,而不是从客户端。如果你从客户端发送它,你需要在客户端存储访问令牌或类似的东西,这在大多数情况下是一个坏主意。这样做的一个很好的副作用是,它也可以解决CORS问题。
有关CORS的解释,请查看以下内容:
How does Access-Control-Allow-Origin header work?
对于为什么在某些情况下,普通JS可以在jQuery不能工作的情况下工作的具体解释:
A CORS POST request works from plain javascript, but why not with jQuery?
发布于 2018-04-18 05:54:24
你的有效载荷似乎太简单了。:-D OTRS的REST接口是有限的,并且不容易使用。例如,如果您想要通过curl创建一个票证,那么有效负载需要类似于:
curl -X POST -H“内容类型:应用程序/json”--data '{"UserLogin“:"ZnunyAgent","Password”:"znuny4otrs"," ticket“:{"Title”:"some ticket title","Queue“:"Postmaster","State”:"new","PriorityID“:"3","CustomerUser”:"znuny@znuny.com"},“文章”:{"Subject“:”某主体“,"Body”:“某主体”,"ContentType“:”文本/纯文本;字符集=ISO-8859-15“,"MimeType”:“文本/纯文本”,“字符集”:“ISO-8859-15”}‘http://localhost/otrs/nph-genericinterface.pl/Webservice/1/TicketCreate
如您所见,对于Ajax请求,您需要注意/采用以下内容:
1)将用于身份验证的用户放入有效负载(或首先创建用户会话)
2)使用正确的url和url中配置的webserice id
发布于 2018-11-20 22:36:40
下面的方法对我很有效。
我还为CORS添加了一个Chrome扩展,以绕过localhost CORS限制。
var data =
{
"Ticket": {
"Title": "Rest Create",
"Type": "Support",
"Queue": "{some queue here}",
"State": "New",
"Priority": "3 Important",
"CustomerUser": "{some email here}"
},
"Article": {
"Subject": "Rest Create",
"Body": "Test",
"ContentType": "text/plain; charset=utf8"
}
};
$.ajax({
url: "http://dev-otrs-1/otrs/nph-genericinterface.pl/Webservice/{CONNECTORNAME}/Ticket?UserLogin={USERNAME}&Password={PASSWORD}",
type: "post",
data: JSON.stringify(data),
success: function (response) {
console.debug(response);
}
});https://stackoverflow.com/questions/49305007
复制相似问题