2014-01-27 6 views
1

Я пытаюсь использовать AJAX в ASP.NET в первый раз - при попытке передать следующие данные к WebMethod в моей соответствующей ASPX странице:Невозможно передать данные методу

$.ajax({ 
    type: "POST", 
    url: "myurl.aspx/SaveScreen", 
    data: "{'data': " + JSON.stringify(arrayRows.data) + "}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (msg) { 
     alert(msg.d); 
    } 
}); 

Вот мой WebMethod на странице aspx. Я попытался передать простой объект данных, который содержал только один ключ и значение, которое успешно работало. При попытке передать этот объект я получаю сообщение об ошибке внутреннего сервера с кодом 500.

Что я могу делать неправильно?

+0

Вы абсолютно не должны конкатенировать строки, когда вместо этого может использоваться определение объекта. Конкаты гораздо менее читаемы. –

+0

Какой у вас параметр типа данных в веб-методе? –

ответ

2

Попробуйте это : data: {"data": JSON.stringify(arrayRows.data)}

+0

Это разумное решение, а не конкатенация строк, и я замечаю из других изменений, что вы разместили это решение в первую очередь. –

+0

Я предпочитаю это конкатенировать струны - спасибо! –

0

Вы можете обернуть строку данных в цитатах:

$.ajax({ 
    type: "POST", 
    url: "SpecifyPositioning.aspx/SaveScreen", 
    data: "{'data': '" + JSON.stringify(arrayRows.data) + "'}", //Added ' around JSON.stringify to pass string instead of object 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (msg) { 
     alert(msg.d); 
    } 
}); 

Это, однако, будет чистое решение:

data: {"data": JSON.stringify(arrayRows.data)}, 
+0

Это решило проблему, спасибо. Можно ли передавать данные без стягивания? Если да, то как? –

+0

вы не можете передать 'Array' в' WebMethod' напрямую, насколько я знаю, поэтому единственная замена для 'JSON.stringify', которую я знаю, будет' arrayRows.data.join() ' –

+0

. Следующее дополнение разумный способ сделать это. Создание определения объекта в виде строки, когда это не требуется, добавляет бессмысленные уровни сложности. –

0

Попробуйте это:

data: "{data: '" + JSON.stringify(arrayRows.data) + "'}" 
+0

Почему downvote? – Plue

+0

Пока он «работает», создание строки для определения объекта не только бессмысленно, но и приводит к плохой практике. Ответ на голосование - правильный способ сделать это. Я вижу, однако кто-то сочувствует вам и проголосовал ... победил всю цель голосования :) –

+0

Итак, я должен использовать ** данные: {"dataName": stringValue} ** вместо этого? – Plue

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