2010-10-01 2 views
1

Я не могу вызвать веб-службу (asmx) из функции jQuery.вызов asmx веб-службы из jQuery

Это сообщение об ошибке «отказ в доступе» при вызове веб-службы. Он работает в dev и локальном компьютере, но я получаю ту же ошибку.

Вот мой Аякса вызов

$.ajax({ 
      type: "POST", 
      url: "http://server.com/calculator.asmx/calculus", 
      data: "{ 'userID': '" + $("#usrid").val() + "','password': '" + $("#password").val() + "' }", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: Success, 
      error: Error 
     }); 

Мой веб-сервис

[WebService(Namespace = "http://www.company.com/webservices/calculus")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
[System.Web.Script.Services.ScriptService] 

public class calculator : System.Web.Services.WebService 
{ 

    [WebMethod] 
    [System.Web.Script.Services.ScriptMethod(UseHttpGet=false, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)] 
    public bool calculus(string userName, string password) 
    {// my code} 

Ошибка в http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js функции и "Доступ запрещен" ошибка при e.username? X.open (п, e.url, e.async, e.username, e.password): x.open (п, e.url, e.async);

Я включил [AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] с классом, как показано в http://forums.asp.net/p/1570168/3935094.aspx и не смог исправить проблему. Может кто-нибудь, пожалуйста, помогите мне в этом.

Спасибо

+2

Является ли веб-служба другим доменом? –

+0

Согласен с @Nick, звучит (и выглядит) как проблема с перекрестным доменом – Sage

+0

Я не уверен, но с dataType 'json' не должны ваши данные быть объектом, а не строкой? – sje397

ответ

0

JSONP - это возможный способ обхода «той же политики происхождения» (например, межсайтового скриптинга или XSS). Он поставляется с собственным набором проблем (например, он работает только с запросами GET-mode), поэтому это, безусловно, не панацея. Но это, вероятно, стоит вашего времени, чтобы взглянуть на него. Есть приличное количество сообщений о переполнении stackoverflow, которые должны помочь вам приступить к работе.

2

AJAX вызовы связаны с same origin policy что означает, что вы не можете ссылаться на веб-сервиса, который находится на другом домене. Браузер просто отбросит запрос. Одним из возможных решений было бы написать сценарий на стороне сервера в том же домене, который будет служить мостом для фактической веб-службы, а затем вызвать этот скрипт.

+0

Спасибо Дарин. Я понял, что проблема. Это проблема с перекрестными доменами. Но теперь проблема заключается в том, что веб-сервис отлично работает с IE, но ни с mozilla, ни с chrome .. Я могу видеть веб-методы и все, когда я даю прямой url, но он не звонит из jQuery снова – alienavatar

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