2009-04-24 56 views
1

我已經閱讀了很多關於jquery的內容,並且我有一個webservice,我將companyID轉換爲真正的companyName。現在我想用jquery或javascript調用該webservice。該webservice在主機http://webservice/service.asmx恩我正在http://tlmos。我不工作,我總是得到一個錯誤使用jquery調用webservice時出錯

這裏是我的代碼:

<script type="text/javascript" src="http://kmosvi24/_layouts/jquery-1.3.2.min.js"></script> 

<script type="text/javascript"> 
var test = "KBEACDNV"; 
$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "http://webservice/service.asmx/getCompanyByCompanyID", 
    data: "{'sCompanyID:' + 'test'}",    
    dataType: "json", 
    succes:function(response){  alert("good"); }, 
    error: function(response) { alert("Uh oh"); }, 
complete: function(response) {  alert("" + response); } 
}); 

</script> 

有人能幫助我嗎?

THX

回答

6

嗯..你拼寫錯了成功在線11

..而且你可能想格式化數據

data: "sCompanyID=test" 

採取快速穿過jQuery API page on this one驗證您正在傳遞您的服務預期的參數。看起來您期待使用ASMX服務的SOAP數據包,並且jQuery更適合使用從ASHX文件或WCF服務生成的寧靜服務。

0

爲了從Jquery運行你的Web服務,你應該使用WCF或者只是普通的Web服務,但是你應該把[ScriptMethod]添加到你的服務的方法,[ScriptService]添加到你的Web服務描述中。

只是注意到你試圖從一臺主機調用服務到另一臺主機......那個不行。服務應該與其被調用的頁面位於相同的域中。

以傑夫的回答答覆,格式化數據正確的方法是數據:{鍵:「值」}

+0

對格式化數據達成共識,我沒有注意到數據類型是JSON。 – 2009-04-24 15:22:21

1

您正在使用的數據參數正確的,我不認爲,通常這是一個鍵值對像:

data: {sCompanyID: 'test'} 

我相信他們這樣你使用它會導致jQuery的嘗試發佈到http://webservice/service.asmx/getCompanyByCompanyID?sCompanyID:blah

也沒有.NET Web服務的SOAP?我不認爲jQuery可以解析...

編輯:沒關係,沒有意識到你是通過這些作爲JSON數據。感謝評論者!

+0

數據正在被正確傳遞,它期望一個json字符串,而不是一個JavaScript變量。 – 2009-04-24 14:03:06

+0

jquery會自動將它編碼爲一個查詢字符串。你可以發送一個JSON字符串到一個asmx方法,該方法有[ScriptService]和[ScriptMethod] – 2009-04-24 14:06:28

+0

啊沒有意識到它可以做到這一點!更新了答案。 – 2009-04-24 15:03:42

1

您不能對自己以外的主機執行AJAX調用。如果您確實需要這樣做,請打電話給您自己的服務器,並使用簡單代理重定向到您需要的域。

您可以通過在你的Web服務器使用的ProxyPass指令性例如這樣做:

ProxyPass   /service/ http://webservice/service.asmx 
ProxyPassReverse /service/ http://webservice/service.asmx 

然後你就可以發出一個AJAX請求到/服務/ getCompanyByCompanyID,它會被代理到正確的網址。

2

正如其他人指出的,你不能在另一個域上調用Web服務,但是當你使用ASP.NET時,你可以編寫一個原始HTTP處理程序(通常使用.ashx擴展來代理你的請求,服務器。),你會你的「TIMOS」的服務器上放置

所以在你的ashx的文件,你可以寫的線沿線的東西...

public void ProcessRequest (HttpContext context) 
{ 

    XmlDocument wsResponse = new XmlDocument(); 
    string url = "http://webservice/service.asmx/getCompanyByCompanyID?CompanyID=" 
    context.Request.Form["CompanyID"].ToString() 
    wsResponse.Load(url); 
    string XMLDocument = wsResponse.InnerXml;   
    context.Response.ContentType = "text/xml";   
    context.Response.Write(XMLDocument); 

} 

希望這有助於。

2

您可以向其他服務器發出請求,但前提是該調用使用GET。由於你所做的只是查找,GET請求應該沒問題。

0

使用jQuery AJAX請求你需要定義變量時在請求被髮送到使用以下格式:

data: "variableName=variableContent", 

您寫道:

data: "{'sCompanyID:' + 'test'}" 

這不會對工作原因有兩個:
- 您已包括不需要在那裏的大括號。
- 您使用了分號「:」,而不是等號「=」。

只要你改變這些,它應該工作。

P.S我只是意識到傑夫弗裏茨已經給你正確的答案。他的答案是現貨!