2009-09-04 4 views
0

Я только начинаю возиться с методами страницы и jQuery вместе с небольшим успехом.JQuery + Методы страницы: метод никогда не вызывается

Ниже мой пример кода ...

Default.aspx.cs

[WebMethod] 
public static string test() 
{ 
    return "testing 123"; 
} 

test.js

$(document).ready(function() 
{ 
    $("#Result").click(function() 
    { 
     $.ajax({ 
      type: "POST", 
      url: "Default.aspx/test", 
      data: "{}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) 
      { 
       alert(msg); 
      } 
     }); 
    }); 
}); 

Если установить точку останова «возвращения «тестирование 123»; он никогда не попадает, также когда я пытаюсь сделать http://localhost/default.aspx/test Я получаю всю страницу, опубликованную назад, то же самое с функцией jQuery.

Я также попытался использовать scriptmanager и MS AJAX PageMethods.test(); с тем же точным результатом.

ответ

0

Я не уверен, что это ваша проблема, но попробуйте изменить свой тип от POST до GET. Если вы планируете http://localhost/default.aspx/test в своем браузере, и он работает, то вы знаете, что он работает для операции GET, потому что это то, что делает ваш браузер.

+0

Это странно, кажется, что оба метода дают одинаковый результат. Вызов $ .ajax будет возвращаться с данными, но это целая страница. Итак, если я сделал http: //localhost/default.aspx/test в своем браузере, он вернет весь контент страницы default.aspx ... но то же самое произойдет, если я просто сделаю http: //localhost/default.aspx/doesntexist123123 – 2009-09-04 18:58:32

+0

@Goosey В этом случае я бы предложил помещать веб-метод в фактическую службу (расширение .asmx). Посмотрите, что вам нужно. – Joseph

0

Theres некоторая хорошая информация here. Также here.

Кроме того, я не знаю, имеет ли это значение, но попробуйте сделать фактическую страницу веб-сервиса и поместив туда метод, т. Е. Один с расширением .asmx.

+0

TY для быстрого ответа. Я исследовал обе эти страницы, прежде чем я разместил здесь. Если я использую веб-службу вместо PageMethods, она работает, и я могу вернуть ее в XML или JSON. Просто хотел получить версию PageMethods Version. – 2009-09-04 18:56:23

0

Во-первых, вы должны убедиться, что ваши целевые элементы (#RESULT) не обновляются с помощью UpdatePanels, в противном случае вы можете использовать живую функциональность так:

$("#Result").live("click", function() { 
    ... 
}); 

Тогда ваш JQuery код в то же самое страницу как метод страницы?

+0

#Result div существует. И используя FireBug (net panel), я вижу, что это POSTing и получение ответа от url по умолчанию .aspx/test. Это всего лишь целая страница, а не мой «тест»; строка. Также, если я устанавливаю точку останова там, он никогда не попадает. – 2009-09-04 19:00:00

+0

Извините, что пропустил вторую половину вашего вопроса. Мой код JQuery находится в отдельном файле .js. C# WebMethod находится в коде. – 2009-09-04 19:03:00

1

просто попробовал то, что вы делаете, с отдельным файлом, и все работает нормально.

У вас есть «scriptmanager» на вашей странице? попробуйте удалить его. Pagemethods/jQuery ajax отлично работает без него.

0

Я использую технику подробно here.

Я установил мои данные:

var contactData = "{'name':'" + txtName.val() + "', 
        'company':'" + txtCompany.val() + "', 
        'email':'" + txtEmail.val() + "'}"; 

ли мой метод успеха определен:

function success(result) 
{ 
    alert(result.d); 
} 

Затем вызовите

`$.pageMethod("ContactUs/SendContactUsEmail", contactData, success);` 

Работа это goodun.

2

Я понял это и не имел ничего общего с JQuery или PageMethods ... У меня есть URL-адрес Rewriter, который перехватывает и перенаправляет и убивает все, что получает POSTED.

Спасибо всем за помощь! -Goosey

0

Эта проблема также возникает при использовании PageMethods в сочетании с маршрутизацией URL. Вы можете решить это, установив URL-адрес вручную (в javascript):

PageMethods.set_path('/pagename.aspx'); 
Смежные вопросы