遇到跨域jquery / Ajax服务调用问题

时间:2016-11-17 18:15:18

标签: javascript jquery json ajax wcf

我已经通过线程读完了这里和其他地方的线程,试图让跨域ajax调用工作。我有一个Restful WCF服务,返回一个简单的bool。我使用正确的响应格式(Json)和带回调参数的预期url进行设置:

[WebGet(RequestFormat = WebMessageFormat.Json, 
ResponseFormat = WebMessageFormat.Json, 
UriTemplate = "ShowCreditCardTextJQUERY?memberNumber={memberNumber}&callback={callback}", 
BodyStyle = WebMessageBodyStyle.WrappedRequest)]

我的Ajax看起来像这样:

$.ajax({
    url: "http://example.com/service/service.svc/ShowTextJQUERY",
    type: "GET",
    contentType: "application/json; charset=utf-8",
    dataType: "jsonp",               
    crossDomain:true,
    data: "{'memberNumber':'" + memberNumber + "'}",
    cache: false,               
    //success: alert(memberNumber),
    success: function (data) {
        var output = data;

        if (!data) {
            $("#dialog").dialog(
           {
               modal: true,
               width: 735,
               height: 550
           });
        }
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert(xhr.status);
    }
});

我收到200响应,但这是在错误块中。我很茫然(对jquery / ajax来说还是很新的)。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

可能是这些代码行解决了您的问题,这适用于常规的Web服务调用

          var jsonData = [YOUR JSON PARAMETER];

            $.ajax({
                async: false,
                type: "POST",
                url: [YOUR WEB SERVICE URL],
                contentType: "application/json; charset=utf-8",                  
                data: JSON.stringify({ json: jsonData }),
                dataType: "json",                
                success: OnSuccess,
                failure: function(err) {
                    alert("Error : " + err.d);
                }  
            }); 

            function OnSuccess(data) {
                alert("Success:" + data.d);                       
            }

你可以做一件事,只需要设置Access-Control-Allow-Origin& CustomeHeaders中的Access-Control-Allow-Header是您的Web服务web.config文件。

 <add name="Access-Control-Allow-Origin" value="*" />
 <add name="Access-Control-Allow-Headers" value="Content-Type" />

如果您只想允许特定域,则可以使用域的特定值而不是*值

来实现