2013-04-24 89 views
0

Currenly我使用asp.net web服務,但是當我通過Ajax調用Web服務方法調用它總是返回XML不是JSONASP.Net Web服務始終返回XML不是JSON

我嘗試

ASP.Net web service won't return JSON - Always XML

但它也沒有爲我工作..

JS: -

$.ajax({ 
      type: "Post", 
      contentType: "application/json; charset=utf-8", 
      url: "http://www.quietincomes.com/LoginWebservice.asmx/Demo", 
      dataType: "jsonp", 
      success: function (data) { 
       alert("1" + data); 
      }, 
      error: function (result) { 
       alert("2" + JSON.stringify(result)); 
      } 
}); 

LoginWebservice.asmx: -

[WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string Demo() 
    { 
     return "Harshit"; 
    } 

我哪裏錯了..

的jsfiddle例子: -

http://jsfiddle.net/EXvqc/

+0

輸出,同時有http://www.quietincomes.com/LoginWebservice。asmx/Demo正在返回JSON,但你需要返回JSONP,這意味着尋找一個名爲「回調」的get參數,並將JSON包裝在其中(請參閱我的答案) – HMR 2013-04-24 14:51:50

+0

您的站點是否需要將此公開給其他域?服務只消耗於(來自)同一個域的頁面? – HMR 2013-04-24 14:54:49

+0

其實我有一個網站..我通過url重寫和iis中的一些設置創建了子域。現在,當我的網站harshit.abc.com使用像http://www.abc.com/webservice.asmx/demo這樣的完整網址向其自己的網站調用web服務時,它會在我的ajax請求中返回數據。但數據總是以xml格式。並導致錯誤回調 – 2013-04-24 14:58:34

回答

1

首先,您必須使用方法發送請求到您的Web服務。正如您使用JSONP一樣,它總是查找回調函數,您必須爲其定義回調函數。

Refer

和你有其他的東西添加像下面

[System.Web.Script.Services.ScriptService] 
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService] 
    public class LoginWebservice : System.Web.Services.WebService 
    { 

     [WebMethod] 
     public string Demo() 
     { 
      return "Harshit"; 
     } 
    } 

表示Web服務可以從腳本調用。這個類不能被繼承。

ASPX/HTML將包含

$.ajax({ 
      type: "Post", 
      contentType: "application/json; charset=utf-8", 
      url: "http://www.quietincomes.com/LoginWebservice.asmx/Demo", 
      dataType: "json", 
      success: function (data) { 
       alert("1" + data); 
      }, 
      error: function (result) { 
       alert("2" + JSON.stringify(result)); 
      } 
}); 

短暫見下面

enter image description here

-1

JSONP不是JSON,JSONP使用,並得到了相同的起源策略(站點A不能向站點B發出ajax請求)。爲了解決這個問題,站點A將創建一個腳本標籤:

document.createElement("script") 

然後設置它的源站點B,通常指定如www.B回調回調=呼我

站點B的典型反應會是:

callMe({siteBSays:"hello"}); 

JQuery隱藏爲您創建javascript元素,因此它看起來像一個正常的ajax請求。確保網站B有正確的響應類型標題我認爲它是文本/ javascript

跨域請求的另一種方法是站點B有一個響應標頭,允許站點A通過設置一個ajax請求(cors)響應標題訪問控制 - 允許 - 來源