2012-11-23 28 views
6

jQuery:jQuery AJAX "200 OK", nhưng không có phản ứng dữ liệu

$.ajax({ 
url : url, 
type : 'GET', 
dataType: 'json', 
data: { 
    'FN' : 'GetPages', 
    'PIN' : '7659' 
}, 
xhrFields: { 
    withCredentials: true 
}, 
crossDomain: true, 
success: function(data) { 
    alert('succsess'); 
    console.log('data', data); 
}, 
error: function (xhr, ajaxOptions, thrownError) { 
    alert('error'); 
    console.log(xhr.status); 
    console.log(thrownError); 
} 
}); 

Firebug Firefox Mạng

Firebug Error http://s14.directupload.net/images/121123/8ar5vljg.png

gì xảy ra

AJAX "error:" sự kiện được t riggered và console.log tôi kết quả đầu ra là:

xhr.status -> 0

thrownError -> (empty String)

là bình thường này? Khi tôi nhập URL trong trình duyệt, tôi nhận được tệp tải xuống có nội dung JSON trong đó, đây không phải là vấn đề đúng không?

+0

Trên url trình duyệt, phản hồi là: [{"pg": 0, "descr": "PC1"}, {"pg": 1, "descr": "PC2"}, {" pg ": 2," descr ":" PC3 "}, {" pg ": 3," descr ":" HG1 "}, {" pg ": 4," descr ":" HG2 "}, {" pg " : 5, "descr": "HG3"}, {"pg": 6, "descr": "HG4"}, {"pg": 7, "descr": "DW1"}, {"pg": 8 , "descr": "DW2"}, {"pg": 9, "descr": "CMN"}] – user1841515

+0

Ngoài ra, hiểu biết của tôi là ** jsonp ** sẽ không hoạt động vì tôi không được phép thay đổi bất cứ điều gì máy chủ và phản hồi của nó sẽ ở định dạng json và không phải định dạng jsonp – user1841515

+0

jsonp sẽ không ảnh hưởng đến máy chủ. Nhưng nó có thể giúp đỡ để có được xung quanh vấn đề CORS. Nó có thể là lựa chọn duy nhất của bạn mà không sửa đổi máy chủ – JonWells

Trả lời

10

Nhờ @CrimsonChin Tôi biết nó là một vấn đề chính sách xứ Same

In computing, the same origin policy is an important security concept for a number of browser-side programming languages, such as JavaScript. The policy permits scripts running on pages originating from the same site to access each other's methods and properties with no specific restrictions, but prevents access to most methods and properties across pages on different sites.[1]

(từ http://en.wikipedia.org/wiki/Same_origin_policy)

Cấp khách hàng JavaScript truy cập cơ bản với các nguồn lực của bạn chỉ đơn giản đòi hỏi thêm tiêu đề phản ứng một HTTP, cụ thể là :

Access-Control-Allow-Origin: * 
Access-Control-Allow-Origin: http://foo.example.com 

(từ http://enable-cors.org/)

ofc, chuyển phản hồi JSON thành phản hồi JSONP cũng sẽ hoạt động. Thx @djakapm

2

tôi không thể tìm ra từ hình ảnh, nhưng nếu bạn đang cố gắng gửi yêu cầu AJAX đến tên miền khác nhau, bạn cần phải sử dụng JSONP, yêu cầu AJAX đơn giản sẽ không đủ

Cố gắng thay đổi dataType: 'json'-dataType: 'jsonp'

và thêm callback=? để bạn URL

+0

Ok vì vậy tôi đã dùng thử và nhận được lỗi sau: \t Lỗi cú pháp descr ":" DW1 "}, {" pg ": 8," descr ":" DW2 "}, {" pg ": 9, "descr": "CMN"}] – user1841515

+0

Và lỗi: jQuery172046435253250156217_1353659110552 không được gọi là – user1841515

+0

Bạn có quyền kiểm soát phản hồi của máy chủ không? trong php tôi thường trả lời như sau: $ _GET ['callback']. '()'. nó sẽ bắt chước một hàm javascript gọi là – djakapm

3

Hãy thử điều này một

$.ajax({ type : "GET", 
      url : URL, 
      data: { 
      'FN' : 'GetPages', 
      'PIN' : '7659' 
      }, 
      xhrFields: { 
      withCredentials: true 
      }, 
      crossDomain: true, 
      dataType : "jsonp", 
      jsonp : "jsoncallback", 
      jsonpCallback : "SMS", 
      cache : true, 
       success : function(service_data) { 


         }, 
       error : function(msg) { 
       alert(JSON.stringify(msg)); 
       } 
      }); 
+0

Tôi đã chạy mã này và nhận được hộp cảnh báo sau đây: {"readyState": 4, "trạng thái": 200, "statusText": "success"} Và trong bảng điều khiển firebug lỗi: Cú phápError: ký tự không hợp lệ trong phản hồi ** json ** "descr" : "CMN"}] <- và mũi tên chỉ vào Dấu hỏi đó không nên ở đó !? – user1841515

+0

@ user1841515 thử chạy service_data thông qua json lint (http://jsonlint.com/) để đảm bảo rằng json được định dạng tốt – JonWells

+0

@CrimsonChin Tôi đã sao chép json và chạy kiểm tra -> Valid JSON – user1841515

Các vấn đề liên quan