2013-06-18 3 views
0

Я пытался заставить это работать слишком долго и думал, что могу попросить о помощи здесь. Я пытаюсь передать объект javascript на сервер, а затем обратно на клиентскую сторону. Как бы то ни было, при каждой обратной передаче я хочу обновить значение объектного кода позади или на стороне клиента в зависимости от определенных условий. Я могу использовать скрытое поле здесь, но я пытаюсь изучить ajax так. Я объявила глобальную переменную клиентскую сторону, называемую sortList, которая хранит информацию о том, какая задача хранится в каком слоте. Так его, как:Преобразование в метод Json и метод вызова

var sortList = {}; 
sortList[tid] = sid; 

Далее я написал веб-метод:

[WebMethod] 
    public static string storeList(DragList dict) 
    { 
     DragList dl = dict; 
     int i = 0; 
     return "success"; 
    } 
public class DragList 
    { 
     public string taskName { get; set; } 
     public string slotName { get; set; } 


    } 

и на стороне клиента, я звоню его помощью:

console.log(JSON.stringify(sortList)); 
     $.ajax({ 
      type: "POST", 
      url: "Jobs.aspx/storeList", 
      data: JSON.stringify({dict: sortList}), 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) { 
       }}); 
     } 

Моя проблема заключается в WebMethod, объект dictDirect объекта всегда имеет значение null, хотя в запросе dict является объектом json со значением в нем. enter image description here

Я уже давно застрял на этом и почти планировал перейти в скрытое поле, чтобы выполнить задачу. Но было бы очень полезно, если бы кто-то мог указать мне в правильном направлении.

Изменения, внесенные мной после: Я использую tid как ключ для поиска sid в массиве объектов, поэтому, если я разбиваю его на части, я потеряю сопряжение значений ключей. Вместо этого, я создал новую строку в нужном формате JSON:

jsonStr = "{"; 
      var w = 0; 
      for (var key in sortList) { 
       var obj = sortList[key]; 
       jsonStr += '"key":{"taskName":"' + key + '", "slotName":"' + obj + '"},'; 
       w++; 
      } 
      jsonStr = jsonStr.substring(0, jsonStr.length - 1); 
      jsonStr += '}'; 
      console.log(jsonStr); 


     $.ajax({ 
      type: "POST", 
      url: "Jobs.aspx/storeList", 
      data: {dict: jsonStr}, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) { 
       }}); 
     } 

Но теперь, я получаю следующее сообщение об ошибке: enter image description here

Here is my post

ответ

1

Ваш Json является неправильным:

Вы направляют его как

{"taskName:mainContent_ptask5":"alotName:mainContent_palot0"} 

Вместо

{"taskName":"mainContent_ptask5", "alotName":"mainContent_palot0"} 

Бывший считает имя свойства, как taskName:mainContent_ptask5 поэтому он не может deserilaize с вашим именем аргумента taskName или slotName

Преступник должен быть:

var sortList = {}; 
sortList[tid] = sid; // here i guess tid is "taskName:mainContent_ptask5" and sid is "alotName:mainContent_palot0" 

Вместо попробовать что-то вроде этого:

var tidParts = tid.split(':'); 
var sidParts = sid.split(':'); 
var sortList = { 
}; 
sortList[tidParts[0]] = tidParts[1]; 
sortList[sidParts[0]] = sidParts[1]; 
+0

Я не могу сломать i t на части, так как тогда я потеряю свое ключевое значение, сопрягая задачи с слотами. Вместо этого я исправил свою строку json, но потом я получил ошибку. См. Редактирование в исходном сообщении. – Ratan

+0

@ Ratan да, конечно, я не знаю, что там, поэтому сделал предположение, но моя точка была ясна ... – PSL

+0

@ Ratan вы можете вставить свою конкатенированную строку JSON. Возможно, там что-то не так. Попробуйте использовать нотацию объекта вместо конкатенации. Также, если это строка, попробуйте '{dict: JSON.parse (jsonStr)}' – PSL

Смежные вопросы