#javascript #asp.net #json #jquery #pagemethods
#javascript #asp.net #json #jquery #pagemethods
Вопрос:
Я использую PageMethod с javascript для вызова кода на стороне сервера:
function getMonths() {
PageMethods.BindMonthlyPeriods(getMonthsSuccess, onFailure); }
}
function getMonthsSuccess(result, userContext, methodName) {
var picker = document.getElementById("monthPicker");
for (var i = 0; i < result.length; i ) {
var newOption = document.createElement('option');
newOption.text = result[i];
newOption.value = result[i];
picker.add(newOption);
}
}
С этим в коде-за:
[WebMethod]
public static string[] BindMonthlyPeriods()
{
}
Это отлично работает в IE / Chrome, но не в firefox. Сообщение об ошибке отсутствует данные просто не заполняются в Firefox.
Я также пытался использовать вместо этого вызов jQuery ajax, но это не работает, хотя я не уверен, что сделал это правильно:
function getMonths() {
$.ajax({
type: "POST",
url: "page.aspx/BindMonthlyPeriods",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
var picker = document.getElementById("monthPicker");
for (var i = 0; i < msg.length; i ) {
var newOption = document.createElement('option');
newOption.text = result[i];
newOption.value = result[i];
picker.add(newOption);
}
}
});
Редактировать
Используя Firebug, я не нашел сообщений об ошибках на вкладке Net, но обнаружил эту ошибку на вкладке консоли:
неперехваченное исключение: [Исключение… «Недостаточно аргументов» nsresult: «0x80570001 (NS_ERROR_XPC_NOT_ENOUGH_ARGS)» расположение: «JS frame ::http://xxxxx.xxxxxxx.com/…/page.aspx :: getMonthsSuccess :: строка 251″ данные: нет]
Комментарии:
1. @Sean, ты можешь использовать firebug и проверить, в чем проблема, он четко показывает ошибку в ajax
2. Вызов jQuery ajax также не работает в IE. Я думаю, что id скорее использует подход jquery, чем подход PageMethod. Я проверю firebug.
3. @sean , используй firebug для отладки, мы можем легко найти проблему, см. resonse на вкладке net.
4. @sean требует ли ваш метод каких-либо аргументов, если да, то он не работает там
5. Метод не имеет никаких параметров, просто возвращает строку[].
Ответ №1:
Решил это, добавив параметр null в метод ‘add’ monthpicker:
picker.add(newOption, null);
Ответ №2:
< asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click"
OnClientClick="return saveChanges()" /> **Script:** var isPostBack=false; function saveChanges() { if(!isPostBack){
PageMethods.savePageChanges(tableData, updateContent_OnSucceeded, updateContent_onFailure);
return false;
}else{
return true;}
}
function updateContent_OnSucceeded(retval) {
isPostBack=true;
$('# <%=btnSave.ClientID%>).click();
}
function updateContent_onFailure(val) {
alert("Error: " val.get_message());
}**CS:**[System.Web.Services.WebMethod]
public static bool savePageChanges(List<List<string>> rowDataArraySeries)
{}