Так что я бил головой о стену в течение дня или около того, пытаясь заставить это работать. если это просто и глупо - извините и спасибо. Это довольно длинный пост, поскольку я пытаюсь описать все, что я сделал до сих пор.KendoUI DataSource приводит к недопустимому примитиву JSON
Итак, у меня есть веб-сервис ASMX, который я бы хотел использовать для заполнения списка Kendo UI. Это отлично работает, пока я не добавлю данные: к моему транспортному запросу. Так что мой веб-сервис будет выглядеть так:
WebMethod(Description = "Return All Pending Actions Based")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public PendingActionResult GetPendingActions(string sUsername, string sPassword, string sUserID, string sClubID)
{
//code is here;
}
И мое полное DataSource выглядит следующим образом:
dataSource = new kendo.data.DataSource({
transport: {
read: {
type: "POST",
data: "{'sUsername':'[email protected]','sPassword':'13123','sUserID':'1539','sClubID':'1'}",
url: "http://sdk.domain.com/services/general.asmx/GetPendingActions",
contentType: "application/json; charset=utf-8",
dataType: "json"
}
},
schema: {
data: "d.Data", // ASMX services return JSON in the following format { "d": <result> }. Specify how to get the result.
total: "d.Total",
model: {
id: "activityID",
fields: {
activityID: { type: "number", validation: {min: 1, required: true } },
taskName: { type: "string" },
taskNote: { type: "string" },
openDate: { type: "datetime" },
dueDate: { type: "datetime" },
priority: { type: "number" },
statusID: { type: "number" },
openedByID: { type: "number" },
assignedToID: { type: "number" },
statusName: { type: "string" },
complete: { type: "bool" }
}
}
}
});
that.set("pendingActionsDataSource", dataSource);
Я получаю ошибку Спинка:
{ "Сообщение":» InvalidJSONprimitive: "\ u00261 = {\ u00262 = \ u0027 \ u00263 = s \ u00264 = U \ u00265 = s \ u00266 = е \ u00267 = г \ u00268 = п \ u00269 = а \ u002610 = т \ u002611 = е \ u002612 = \ u0027 \ u002613 =: \ u002614 = \ u0027 \ u002615 = а \ u002616 = d \ u002617 = т \ u002618 = я \ u002619 = п \ u002620 = @ \ u002621 = т \ u002622 = а \ u002623 = я \ u002624 = л \ U002 625 =. \ U002626 = с \ u002627 = о \ u002628 = т \ u002629 = \ u0027 \ u002630 = \ u002631 = \ u0027 \ u002632 = s \ u002633 = Р \ u002634 = а \ u002635 = s \ u002636 = s \ u002637 = ш \ u002638 = о \ u002639 = г \ u002640 = d \ u002641 = \ u0027 \ u002642 =: \ u002643 = \ u0027 \ u002644 = 1 \ u002645 = 3 \ u002646 = 1 \ u002647 = 2 \ u002648 = 3 \ u002649 = \ u0027 \ u002650 = \ u002651 = \ u0027 \ u002652 = s \ u002653 = U \ u002654 = s \ u002655 = е \ u002656 = г \ u002657 = I \ u002658 = D \ u002659 = \ u0027 \ u002660 =: \ u002661 = \ u0027 \ u002662 = 1 \ u002663 = 5 \ u002664 = 3 \ u002665 = 9 \ u002666 = \ u0027 \ u002667 = \ u002668 = \ u0027 \ u002669 = s \ u002670 = С \ u002671 = L \ u002672 = и \ u002673 = Ь \ u002674 = I \ u002675 = D \ u002676 = \ u0027 \ u002677 =: " "\ u002678 = \ u0027 \ u002679 = 1 \ u002680 = \ u0027 \ u002681 =} \ u002682 =" StackTrace" : "atSystem.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize (Stringinput, Int32depthLimit, JavaScriptSerializerserializer) \ г \ natSystem.Web.Script.Serialization.JavaScriptSerializer.DeserializeT \ г \ natSystem.Web.Script.Services.RestHandler.ExecuteWebServiceCall (HttpContextcontext , WebServiceMethodDatamethodData) "" ExceptionType «:» System.ArgumentException «}
Так что я начал искать высокие и низкие за все, что было похоже, и нашел другие люди пропуская ни" или»в запросе данных, так что я пытался тоннами различных вариаций него , попытался использовать JSON.stringify, но ошибка продолжалась. Поэтому я пошел к скрипачу, чтобы посмотреть, что отправляется на сервер, и вот моя проблема. Отправляется Junk. Скрипач показывает это в TextView отправляется на сервер:
0=%7B&1='&2=s&3=U&4=s&5=e&6=r&7=n&8=a&9=m&10=e&11='&12=%3A&13='&14=a&15=d&16=m&17=i&18=n&19=%40&20=m&21=a&22=i&23=l&24=.&25=c&26=o&27=m&28='&29=%2C&30='&31=s&32=P&33=a&34=s&35=s&36=w&37=o&38=r&39=d&40='&41=%3A&42='&43=1&44=3&45=1&46=2&47=3&48='&49=%2C&50='&51=s&52=U&53=s&54=e&55=r&56=I&57=D&58='&59=%3A&60='&61=1&62=5&63=3&64=9&65='&66=%2C&67='&68=s&69=C&70=l&71=u&72=b&73=I&74=D&75='&76=%3A&77='&78=1&79='&80=%7D
(я выложу картину онлайн этого, так что это немного легче увидеть)
Так вот я могу ясно видеть, что строка ISN 't отправляется в правильном формате. Поэтому я решил оставить это без использования Kendo dataSource, но вместо этого просто использовать JSON/AJAX. Так что я напечатал это вверх:
function getPAs() {
$.ajax({
type: "POST",
url: "http://sdk.domain.com/services/general.asmx/GetPendingActions",
data: "{'sUsername':'[email protected]','sPassword':'13123','sUserID':'1539','sClubID':'1'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: getPAs_Success,
error: app.onError
});
}
function getPAs_Success(data, status) {
console.log("START getPAs_Success");
var cars = data.d;
var sout = document.getElementById('nav');
var output = "";
$.each(cars, function(index, car) {
output += '<p><strong>' + car.taskName + ' ' +
car.taskNote + '</strong><br /> Priority: ' +
car.priority + '<br />Status: ' +
car.statusID + '<br />Opened By: ' +
car.openedByID + '<br />Assigned To' +
car.assignedToID + '</p>';
});
sout.innerHTML = output;
console.log("END getPAs_Success");
}
И если я смотрю на скрипача в TextView я вижу это посылается на сервер:
{'sUsername':'[email protected]','sPassword':'13123','sUserID':'1539','sClubID':'1'}
И я ясно вижу, мои результаты JSON в стельку, а также.
Так что мой вопрос после того, как все, что:
Есть ли что-то особенное я должен делать с Кендо UI Datasource для того, чтобы осуществить это? Если это имеет значение, я использую Icenium и пытаюсь создать быстрое мобильное приложение для удовольствия.
Спасибо,
Ричард
UPDATE # 1 Пытался как и дальше.
данные: { "sUsername": "[email protected]", "sPassword": "13123", "sUserID": "1539", "sClubID": "1"},
, который проверяет используя jsonlint.com, но когда я смотрю на скрипача теперь я вижу, это отправляется на сервер:
sUsername = админ% 40mail.com & sPassword = 13123 & sUserID = 1539 & sClubID = 1
Так может быть, это потому что сейчас у меня нет котировок вокруг данных, поэтому я пробовал это:
данные: { "sUsername": "[email protected]", "sPassword": "13123", "sUserID": "1539", "sClubID": "1"} ',
и когда Я делаю то, что я получаю такой же беспорядок 0 =% 7 ... как и выше.
Когда я пытаюсь использовать toJSON, я получаю функцию объекта без метода. Делая что-то вроде этого:
var jsPost = $.toJSON({
sUsername: "[email protected]",
sPassword: "13123",
sUserID: "1539",
sClubID: "1"
});
Найдено кто на Telerik форумах, которые сказали не использовать toJSON и вместо того, чтобы использовать JSON.stringify поэтому я попытался это:
var jsPost = {
sUsername: "[email protected]",
sPassword: "13123",
sUserID: "1539",
sClubID: "1"
};
...
data: JSON.stringify(jsPost),
Но все же результат сумасшедшего мусора.
Вы когда-нибудь получали ответ здесь или от Telerik, который не включает в себя вложенный вызов $ .ajax? Я делаю то же самое. Спасибо за обходное решение. –