Попытка использовать grep, чтобы я не делал несколько вызовов на свой сервер для элементов управления, которые он создает -
$.ajax({
type: "POST",
url: "../WebMethods/MarketPersuitMethods.aspx/GetQueryInfo",
data: '{Status: "' + Name + '", search: "' + SearchBox.text() + '" }',
contentType: "application/json; charset=utf-8",
dataType: 'json',
async: false,
success: function (d) {
var preparse = JSON.stringify($.parseJSON(d.d));
var data = $.grep(preparse, function (element, index) {
return element.status.trim() == "Pending";
});
$("[id*=TextBox2]").text(preparse);
}
});
Это возвращает данные в формате JSON, если я тестирую переменную preparse
.
Я не могу опубликовать JSON, потому что его так много, и его нужно будет анонимизировать. Однако в качестве образца он возвращает что-то вроде следующего:
[{
"Project ID": "18180",
"OPRN": null,
"Proj_Type": "2049",
"CompleteDate": "2020-05-21T00:00:00",
"SQFT": 2000,
"State": "FL ",
"County": "Orange",
"status": "Pending"
},
{
"Project ID": "18180",
"OPRN": null,
"Proj_Type": "2049",
"CompleteDate": "2020-05-21T00:00:00",
"SQFT": 2000,
"State": "SC",
"County": "Orange",
"status": "Pending"
},
{
"Project ID": "18180",
"OPRN": null,
"Proj_Type": "2049",
"CompleteDate": "2020-05-21T00:00:00",
"SQFT": 2000,
"State": "GA",
"County": "Orange",
"status": "Won"
}];
Однако при попытке $.grep
я получаю следующее с переменной data
:
[{
{
"P,r,o,j,e,c,t, ,I,D,",:, ",1,8,1,8,0,",
",O,P,R,N,",:, ,n,u,l,l,
"P,r,o,j,_,T,y,p,e,",:, ,",2,0,4,9,",
"C,o,m,p,l,e,t,e,D,a,t,e,",:, ,",2,0,2,0,-,0,5,-,2,1,T,0,0,:,0,0,:,0,0,",
",S,Q,F,T,",:, ,2,0,0,0,,
"S,t,a,t,e,",:, ,",G,A,",
"C,o,u,n,t,y,",:, ,",O,r,a,n,g,e,",
"s,t,a,t,u,s,": ",W,o,n,,
}];
dataType: 'json',
сообщает jquery, что ваш сервер возвращает json и что jquery должен преобразовать его в object
для вас, поэтому d
является объектом javascript. Затем вы анализируете d.d
, как будто это json - , что дает вам другой объект javascript, который вы затем конвертируете назад в json, поэтому ваша служба создает объект, преобразует его в строку json, а затем добавляет его к возвращаемому значению как свойство "d ". Почему бы просто не вернуть одну строку json из вашего сервиса и не использовать $.grep(d.d, ...)
? Как бы то ни было, из вашего кода вы просто хотите изменить наверное на var preparse = $.parseJSON(d.d);
Как указано в комментариях, вам вообще не нужно проводить какую-либо подготовку или подготовку вашего ответа. Предоставленный вами образец — это JSON, и ваш код AJAX сообщает JS, что нужно ожидать ответа JSON (dataType: 'json'
), поэтому в вашем обратном вызове success
d
уже есть JSON. Просто избавьтесь от подготовительного материала, и ваш код заработает:
let d = [
{
"Project ID": "18180",
"OPRN": null,
"Proj_Type": "2049",
"CompleteDate": "2020-05-21T00:00:00",
"SQFT": 2000,
"State": "FL ",
"County": "Orange",
"status": "Pending"
},
{
"Project ID": "18180",
"OPRN": null,
"Proj_Type": "2049",
"CompleteDate": "2020-05-21T00:00:00",
"SQFT": 2000,
"State": "SC",
"County": "Orange",
"status": "Pending"
},
{
"Project ID": "18180",
"OPRN": null,
"Proj_Type": "2049",
"CompleteDate": "2020-05-21T00:00:00",
"SQFT": 2000,
"State": "GA",
"County": "Orange",
"status": "Won"
}
];
var data = $.grep(d, function (element, index) {
return element.status.trim() == "Pending";
});
console.dir(data);
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
var preparse = JSON.stringify(...
создает строку, поэтому вы пытаетесь найти строку. Вы уверены, что знаете, что такое JSON?