SAP의 서비스 계층에 연결하고 url (API REST)에서 쿼리를 작성하는 앱을 만들고 있습니다. famouse 위젯 select2를 사용하고 있지만 문제가 있습니다. 나는 API에 대한 쿼리를 만들 필요가, 그 문장 ("") 공백 문자가 있습니다Select2 위젯은 ajax에 param.term 공백을 "%"가 아닌 "+"로 보냅니다.
"(startswith(CardCode,'"+params.term+"') or startswith(CardName,'"+params.term+"'))
공간이 주변에있는 사람들이다 "또는"연산자. 당신이 볼 수 있듯이, 나는 위젯에 입력되는 용어에 합류 매개 변수로 쿼리를 보내고있다
$('#buscarCliente').select2({
placeholder: "Ingrese código o descripción del cliente",
allowClear: true,
language: "es",
ajax: {
url: SLServer+"BusinessPartners",
crossDomain: true,
xhrFields: {
withCredentials: true
},
dataType: 'json',
type: 'GET',
delay: 550,
params: {
contentType: 'application/raw; charset=utf-8'
},
data: function (params) {
return {
$filter: "(startswith(CardCode,'"+params.term+"') or startswith(CardName,'"+params.term+"'))", // Como se va hacer la busqueda
$orderby : "cardName",
//contentType: 'multipart/form-data;boundary=<Boundary>',
//$filter: "((startswith(CardName,'" + params.term.toUpperCase() + "') or startswith(CardCode,'" + params.term.toUpperCase() + "') or startswith(CardName,'" + params.term + "') or startswith(CardCode,'" + params.term + "')) and CardType eq 'C')&$top=15&$expand=PaymentTermsType",
//$filter: "startswith(CardName,'" + params.term.toUpperCase() + "') or startswith(CardCode,'" + params.term.toUpperCase() + "')",
page: params.page
};
},
processResults: function (data, params) {
// parse the results into the format expected by Select2
// since we are using custom formatting functions we do not need to
// alter the remote JSON data, except to indicate that infinite
// scrolling can be used
params.page = params.page || 1;
return {
results: $.map(data.value, function(item) {
return { id: item.CardCode, text: "<b>"+item.CardCode+"</b> "+item.CardName }; //adecuamos el arreglo al select
}),
pagination: {
more: (params.page * 30) < data.total_count
}
};
},
cache: true
},
escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
/*formatNoMatches: function (term) {
return 'No se encontraron clientes con el código: "' + term + '".<br/><!--span class="link">Click here</span-->',
},*/
minimumInputLength: 1,
//templateResult: formatRepo, // omitted for brevity, see the source of this page
//templateSelection: formatRepoSelection // omitted for brevity, see the source of this page
});
:
그래서 이것은 마일 코드입니다. 문제는 select2가 공백을 "% 20"이 아닌 더하기 기호 (+)로 바꾸는 방식으로 쿼리를 인코딩한다는 것이므로 api rest service가 잘못된 문자이며 내 결과를 얻을 수 없다고 말합니다. 여러분 모두가 볼 수 있듯이
https://service.net:50000/b1s/v1/BusinessPartners?%24filter=(startswith(CardCode%2C%27CLIEN%27)+or+startswith(CardName%2C%27CLIEN%27))&%24orderby=cardName
의 주위에 공간 "또는"연산자는 더하기 기호로 대체되고있다 :
이것은 보이는 방법이다. 나는 자바 스크립트 함수 "encodeUri()"및 "encodeURIComponent()"을 테스트했으며 코드에서 직렬화되고 있다고 생각하기 때문에 아무 것도하지 않습니다. 나는 contentType을 추가했다. 공간을 수동으로 "% 20"으로 바꿨지 만 그 결과는 인코딩되고 악화되었다. (% 2520) ...
아무도 도와 줄 수 없다. 공백이 "% 20"으로 변경되고 지긋 지긋한 "+"이 인코딩 유형을 변경하는 방법이 있습니까 ??
감사합니다.
GET 요청을 보내면 url 매개 변수에 쿼리를 추가 할 수 있지만 검색 창에 입력되는 용어를 가져와야한다는 것을 기억합니다. 그 수준에서 그것을 얻는 방법을 신경 쓰지 마라. .. –