2011-04-05 50 views
0

我下面沒有任何成功的各種網上的例子。我只是試圖創建一個將值傳遞給Web服務調用的初始示例。值傳遞到jQuery的web服務電話嗎?

我在做什麼錯?

我可以HttpHandlers的東西......這個簡單的不應該是這樣的辛苦很容易地做到這一點?

更新:
它失敗的原因是因爲「contentType」屬性丟失。這是在following answer概述。

這裏是我不斷收到錯誤:

System.InvalidOperationException: Missing parameter: key.\r\n at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)\r\n at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)\r\n at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()\r\n at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest() 

這是HTML:

<script type="text/javascript"> 

    var url = '<%=ResolveUrl("~/Services/ProjectDialog.asmx/TryThis")%>'; 

    function callWebService() { 

     jQuery.ajax({ 
      cache: false, 
      type: 'POST', 
      complete: onComplete, 
      data: '{ "key": 42 }', 
      dataType: 'application/json; charset=utf-8', 
      error: onError, 
      success: onSuccess, 
      url: url 
     }); 
    } 

    function onComplete(status, xmlHttpRequest) { 
     var stop = ""; 
    } 
    function onError(xmlHttpRequest, status, error) { 
     var stop = ""; 
    } 
    function onSuccess(data, status, xmlHttpRequest) { 
     var stop = ""; 
    } 

    jQuery(document).ready(function() { 
    }); 

</script> 

<input type="button" value="Run Web Service" onclick="callWebService();" /> 

這是Web服務:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Services; 
using System.Web.Script.Serialization; 

namespace My.Services 
{ 
    /// <summary> 
    /// Summary description for ProjectDialog 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    [System.Web.Script.Services.ScriptService] 
    public class ProjectDialog : System.Web.Services.WebService 
    { 
     [WebMethod] 
     [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
     public string TryThis(Int32 key) 
     { 
      return key.ToString(); 
     } 
    } 
} 
+0

感謝您的幫助傢伙...我會讓人們知道什麼做和不做評論。 – 2011-04-05 12:59:10

回答

4

嘗試更換以下行:

數據: '{ 「鑰匙」:42}',

隨着:

數據:JSON.stringify(數據) ,

如果數據變量聲明爲前面:

VAR數據= {鍵:42};

這從以下的答案採取:Calling .Net webservice with Jquery is causing woe when trying to post data

修訂

上述建議是沒有問題的,正如筆者所指出的,這個問題原來是這將contentType是設置不正確。但是,上面的鏈接確實指出了這一點。

+0

我改變了它,因爲我認爲我是不正確的,但如果它適合你... – 2011-04-05 13:33:57

+0

你原來的原因實際上是不正確的...但引用文章DID答案正確。這就是爲什麼你應該得到信用。 – 2011-04-05 13:35:41

+0

我已經編輯了我的答案,以使其清晰。 – 2011-04-05 13:39:18

0

我覺得你的報價可能需要改變;

data: '{ "key": 42 }', 

應該

data: "{ 'key': 42 }", 
+0

感謝您的回覆......但這沒有奏效。 – 2011-04-05 12:59:32

0

能否請您嘗試獲得並通過的「鑰匙」作爲URL的參數?

+0

感謝您的答覆...但這樣做會產生一個相當長的responseText錯誤開始:請求格式無法識別的URL意外地以'/ TryThis'結尾。: – 2011-04-05 13:02:06

1

我覺得你的問題是你如何設置你的數據參數,我不認爲你需要引號:

data: ({ key: 42 }), 
+1

你絕對不需要單引號(撇號)爲數據的JSON表示。 – 2011-04-05 12:57:08

+0

感謝您的回覆... – 2011-04-05 13:40:29