2010-09-09 53 views
0

我使用協議jsonp來調用web方法。無法使用jquery json調用webmethod

我使用此代碼爲WebService:

public class Service1 : System.Web.Services.WebService 
{ 
    [WebMethod] 
    [ScriptMethod] 
    public string HelloWorld() 
    { 
     return "Hello World"; 
    } 
} 

這jQuery的與Jason在客戶端:

 $.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: 'http://localhost:50837/Service1.asmx/HelloWorld', 
      data: {}, 
      dataType: "json", 

      success: function(Msg) { 
       alert('success:' + Msg.d.FirstName); 

      }, 
      error: function(xhr, textStatus, errorThrown) { 
       alert("error"); 
      } 

     }); 

    } 

這個jQuery讓我總是一個錯誤信息,但我不知道原因。 有人可以幫助我嗎?

+2

對於初學者,將'alert(「error」)''改爲'alert(textStatus +「 - 」+ errorThrown):) – 2010-09-09 19:31:51

+0

錯誤是什麼? – epitka 2010-09-09 19:32:22

+0

爲什麼使用像'http:// localhost:50837/Service1.asmx/HelloWorld'這樣的URL而不是'/Service1.asmx/HelloWorld'?如果其他網站上的Web服務和JavaScript程序?你在當前代碼中使用jsonp的地方? – Oleg 2010-09-09 19:32:31

回答

2

應該將Web服務作爲網站的一部分。如果您不這樣做,您的代碼將無法工作,因爲Same Origin Policy problem(請參閱參考資料)。

你可以在同一個網站上放置很多用ASP.NET MVC,ASMX Web Service和WCF服務等不同技術開發的應用程序,它們都可以很好地協同工作。這是沒有更復雜的JSONP的唯一方法。在你的情況下,JSONP是超大的。你的問題與Calling simple web service (.asmx file) from AJAX and JQuery using JSON - parse error差不多。如果你需要一個正常工作的Hello Wold例子,你可以在完整的代碼示例中找到一個url。

您可以在Question about making XHR requests下閱讀更多關於解決同源策略的不同方法。讀完之後你會明白同源政策問題確實很複雜。你可以解決它,但在你的情況下,你並不需要把所有的東西放在同一個網站上,並使用相對路徑。

+0

好的,你說得對。爲了解決我的問題,我在服務器端調用一個函數並調用WS。感謝幫助。 – 2010-09-10 14:09:49