2013-08-02 139 views
1

我有一個調用跨域的web服務的問題。我在這裏閱讀了一些關於它的文章,但我沒有真正找到解決方案。我剛剛瞭解到我需要的數據格式爲json,因爲我總是在登錄Error: Access denied.時嘗試從服務中獲取xml數據,但現在我遇到了不同的問題。這是我的電話.ajax()從jQuery .ajax()調用Web服務問題

$.ajax({ 
      type: "GET", 
      contentType: "application/jsonp; charset=utf-8", 
      url: "http://tomas/_vti_bin/EmmaService.asmx/GetResult", 
      dataType: "jsonp", 
      data: { 
       value : "testValue", 
       converstionId : "testId" 
      }, 
      success: function(resp) { 
       alert("success: " + resp); 
      }, 
      error: function (xhr, ajaxOptions, thrownError) { 
       alert("error status: " + xhr.status); 
       alert("error status text: " + xhr.statusText); 
       alert("error response text: " + xhr.responseText); 
      }, 
     }); 

由此我得到錯誤有以下3個警報:

error status: 200 
error status text: success 
error response text: undefined 

我不明白的是error status text: success

代碼在我的Web服務:

[WebMethod(EnableSession = false, Description = "Gets result")] 
    public EmmaServiceResult GetResult(string value, string converstionId) 
    { 
     ... 
     return result; 
    } 

如何得到這個工作有什麼建議?謝謝! :)

+0

注意:我無法更改Web服務,它正在被其他解決方案使用,並且我需要正確調用並且無需任何代碼才能正常工作,因爲我正在創建SharePoint 2013應用程序,該代碼不允許隱藏代碼:/ –

+0

您可以在Firefox和/或Chrome Web Inspector中的Firebug中運行此操作,然後將整個請求(文本)和響應(同上)剪切並粘貼到問題中? – deitch

+0

檢查瀏覽器開發工具中的javascript控制檯和網絡選項卡。查找任何錯誤,並查看xhr響應以查看它是否符合您的期望。 –

回答

2

嘗試增加?callback=?到您的網址的結尾:

​​

另外,儘量看thrownError,以確定哪些錯誤是:

alert("error response text: " + thrownError); 

這可能是一個解析錯誤等等。其實並沒有涉及到ajax請求,但是你如何定義應該如何處理響應。

另外,看看here看看如何從WCF服務返回json。

[WebInvoke(Method = "GET", 
      RequestFormat = WebMessageFormat.Json, 
      ResponseFormat = WebMessageFormat.Json, 
      UriTemplate = "players")] 
+0

我已經將它更改爲'xhr.thrownError',它仍然返回'undefined':/ –

+0

對不起,我編輯了我的答案。嘗試只是thrownError –

+0

現在我得到了'錯誤響應文本:jQuery ...很多數字...沒有叫' –

0

我最近在從AJAX調用中製作跨域請求時遇到了很多問題。我們最終無需修改API即可使用它,但我們確實需要訪問託管API的服務器,以便我們可以在響應中發送一些標題。但是整個問題是一個調試的痛苦,我發現所有瀏覽器都報告有意義的錯誤是可怕的。因此,如果這不能解決您的問題,潛在地可能無法爲您工作並提前道歉。

該解決方案需要您提出CORS請求,並向您的服務器響應添加一些標頭。這些頁面都是很好的資源:

https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS http://www.html5rocks.com/en/tutorials/cors/

我覺得你的情況,因爲你正在做一個基本的要求,你不處理cookies,您可以留下您的電話阿賈克斯基本保持不變,如果您發送JSON,只需將dataType更改爲「json」,將contentType更改爲「application/json」。

那麼你必須修改服務器有它通過將這些標頭的響應處理CORS預檢要求:

Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET 
Access-Control-Allow-Headers: Content-Type 

(見這個問題:jQuery CORS Content-type OPTIONS

希望這會爲你工作!