2013-09-30 16 views
12

Vì vậy, đây là cuộc gọi của tôi:Access-Control-Allow-Origin jquery.ajax

$.ajax({ 
     url: url, 
     headers: { 'Access-Control-Allow-Origin': '*' }, 
     crossDomain: true, 
     success: function() { alert('it works') }, 
     error: function() {alert('it doesnt work')}, 
     datatype: 'jsonp' 
    }); 

url của tôi là hợp pháp. Bạn sẽ nhận thấy rằng tôi không có tập dữ liệu. Tôi không chắc chắn nếu datatype đang làm việc đúng như xml thực sự của nó được trả lại, nhưng tôi đã cố gắng đó quá. Đó là một cuộc gọi đến api của sportsdata. Trên trang web, họ hiển thị cho bạn một tiêu đề yêu cầu của x-originating-ip vì vậy tôi đã thử rằng nơi truy cập-control-allow-origin là.

Tất cả điều này vẫn trả lại lỗi kiểm soát truy cập . Tôi không rõ ràng về những dữ liệu là nếu tôi đặt nó, vì vậy tôi đã bỏ qua nó cho bây giờ. Tôi đã thử một vài điều khác nhau tôi googled, tôi hiểu lý do tại sao tôi nhận được lỗi. Tôi không biết cách sửa nó. Tôi cố gắng để không phải hỏi, nhưng nếu ai đó có thể giải thích hoặc chỉ cho tôi đường đi, đó sẽ là rất nhiều đánh giá cao

+4

Máy chủ phải đặt tiêu đề kiểm soát truy cập chứ không phải máy khách. –

+0

Tôi cũng đang say à? bởi vì nó không phải là một cuộc gọi đến máy địa phương của tôi. máy chủ không phải là địa phương, nhưng tôi đã đọc trên các bài viết khác. tại sao, nếu tôi gõ url của tôi trong trình duyệt trực tiếp, cuộc gọi hoạt động, nhưng với jquery nó không? – dwarf

+0

Hơn nữa, nếu bạn yêu cầu jQuery mong đợi JSONP, thì máy chủ phải trả lại JSONP, chứ không phải XML. –

Trả lời

8

http://encosia.com/using-cors-to-access-asp-net-services-across-domains/

tham khảo liên kết trên để biết thêm chi tiết về Hội Chữ thập chia sẻ tài nguyên tên miền.

bạn có thể thử sử dụng JSONP. Nếu API không hỗ trợ jsonp, bạn phải tạo một dịch vụ hoạt động như một trung gian giữa API và ứng dụng khách của bạn. Trong trường hợp của tôi, tôi đã tạo một dịch vụ asmx.

mẫu dưới đây:

gọi ajax:

$(document).ready(function() { 
     $.ajax({ 
      crossDomain: true, 
      type:"GET", 
      contentType: "application/json; charset=utf-8", 
      async:false, 
      url: "<your middle man service url here>/GetQuote?callback=?", 
      data: { symbol: 'ctsh' }, 
      dataType: "jsonp",     
      jsonpCallback: 'fnsuccesscallback' 
     }); 
    }); 

dịch vụ (asmx) mà sẽ trở lại jsonp:

[WebMethod] 
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
    public void GetQuote(String symbol,string callback) 
    {   

     WebProxy myProxy = new WebProxy("<proxy url here>", true); 

     myProxy.Credentials = new System.Net.NetworkCredential("username", "password", "domain"); 
     StockQuoteProxy.StockQuote SQ = new StockQuoteProxy.StockQuote(); 
     SQ.Proxy = myProxy; 
     String result = SQ.GetQuote(symbol); 
     StringBuilder sb = new StringBuilder(); 
     JavaScriptSerializer js = new JavaScriptSerializer(); 
     sb.Append(callback + "("); 
     sb.Append(js.Serialize(result)); 
     sb.Append(");"); 
     Context.Response.Clear(); 
     Context.Response.ContentType = "application/json"; 
     Context.Response.Write(sb.ToString()); 
     Context.Response.End();   
    } 
+0

'async: false' chưa bao giờ, bao giờ, bao giờ làm điều này – Liam

-1

Tại nơi làm việc của tôi, chúng tôi có các dịch vụ yên tĩnh của chúng tôi về một số cảng khác nhau và dữ liệu nằm trong db2 trên một cặp AS400. Chúng tôi thường sử dụng phương thức AJAX $.getJSON vì nó dễ dàng trả về JSONP bằng cách sử dụng ?callback=? mà không gặp bất kỳ vấn đề nào với CORS.

data ='USER=<?echo trim($USER)?>' + 
     '&QRYTYPE=' + $("input[name=QRYTYPE]:checked").val(); 

     //Call the REST program/method returns: JSONP 
     $.getJSON("http://www.stackoverflow.com/rest/resttest?callback=?",data) 
     .done(function(json) {   

       // loading... 
       if ($.trim(json.ERROR) != '') { 
        $("#error-msg").text(message).show(); 
       } 
       else{ 
        $(".error").hide(); 
        $("#jsonp").text(json.whatever); 

       } 

     }) 
     .fail(function(jqXHR, textStatus, error) { 
     var err = textStatus + ", " + error; 
     alert('Unable to Connect to Server.\n Try again Later.\n Request Failed: ' + err); 
     });  
Các vấn đề liên quan