2013-04-26 38 views
11
$.ajax({ 
     url: 'http://intern-dev01:50231/api/language', 
     type: 'GET', 
     dataType: 'json', 
     success: function() { 
      console.log('It Works!'); 
     }, 
     error: function (request,status, error) { 
      console.log(error); 
      alert(status); 
     } 
    }); 

Tại sao cuộc gọi ajax này không hoạt động? nếu tôi gọi trong trình duyệt nó hoạt động tốt: /.Sự kiện xảy ra lỗi cuộc gọi Ajax nhưng trả về 200 ok

Đây là những gì lợi nhuận cáy:

HTTP/1.1 200 OK 
Content-Length: 122 
Content-Type: application/json; charset=utf-8 
Server: Microsoft-HTTPAPI/2.0 
Date: Fri, 26 Apr 2013 06:56:40 GMT 

[{"LanguageId":1,"LanguageName":"Dansk"},{"LanguageId":2,"LanguageName":"Tysk"},{"LanguageId":3,"LanguageName":"Engelsk"}] 

Trả lời

12

Bạn phải kiểm tra phản ứng ajax nếu nó là hợp lệ hay không. Khi bạn chỉ định trong ajax:

dataType: 'json', 

jQuery sẽ kích hoạt sự kiện lỗi nếu phản hồi không thể được phân tích cú pháp là JSON, ngay cả khi máy chủ trả về 200 OK. Kiểm tra dữ liệu được trả về từ máy chủ và đảm bảo rằng nó là JSON hợp lệ (hãy thử dịch vụ JSONLint).

Nếu dữ liệu trả về không phải là JSON hoặc có lỗi cú pháp thì hãy sửa chúng trong mã phía máy chủ của bạn. Bạn chỉ có thể trả về {} từ tập lệnh phía máy chủ.

Cũng thử điều này.

$.ajax({ 
    url: 'http://intern-dev01:50231/api/language', 
    type: 'GET', 
    cache: false,   
    complete: function (xhr, status) { 
     if (status === 'error' || !xhr.responseText) { 
      console.log(error); 
      alert(status); 
     } 
     else { 
     console.log('It Works!');. 
     } 
    }   
}); 
+0

Nếu tôi sử dụng jsonp tôi nhận được parseError – user2314110

+1

@ user2314110 Chỉ cần xóa dataType: 'json' và thử. Xem câu trả lời chỉnh sửa của tôi. –

+0

Vẫn chỉ nhận được thông báo lỗi – user2314110

5

Có lỗi phân tích cú pháp vì trạng thái hiển thị 200 OK. Vấn đề nằm trong datatype: json. Để kiểm tra điều này, hãy xóa dòng và nó sẽ hoạt động. Để khắc phục điều này, bạn có thể thay đổi nó thành kiểu dữ liệu: văn bản. See this link too for similar question

+0

Đó là lý do tại sao Biểu mẫu động Symfony của tôi đã kích hoạt sự kiện lỗi, vì yêu cầu ajax trả về cho tôi html của biểu mẫu được cập nhật !!! –

+0

Tôi đã trả lại văn bản thuần túy thay vì json. –

0

Tôi biết tôi hơi muộn, nhưng tôi chỉ gặp phải vấn đề tương tự và đây là một trong những kết quả tìm kiếm hàng đầu trên Google. Tôi cố gắng sửa chữa nó bằng cách di chuyển kiểu dữ liệu trên url như thế này:

$.ajax({ 
    type: 'GET', 
    dataType: 'json', 
    url: 'http://intern-dev01:50231/api/language', 
    success: function() { 
     console.log('It Works!'); 
    }, 
    error: function (request,status, error) { 
     console.log(error); 
     alert(status); 
    } 
}); 
+3

Về cơ bản, đây là một cặp giá trị quan trọng nên nó không thực sự quan trọng như cách nó được cấu trúc sẵn. Tôi không nghĩ rằng bất cứ điều gì xây dựng các đối tượng yêu cầu này xem xét nếu khóa dataType là trước hoặc sau một số khóa khác. Nó chỉ đơn giản là xây dựng nó. Mục tiêu ở đây là tìm ra nguyên nhân thực sự. –

0

Nếu bạn đang thử nghiệm tại địa phương với một ứng dụng web và API web ứng dụng khác nhau, sau đó gỡ lỗi ứng dụng và thử nghiệm của bạn API gửi dữ liệu một cách chính xác và ứng dụng các cuộc gọi đến API thông qua AJAX và trả về dữ liệu.

vì tên miền không giống nhau khi chạy ứng dụng AJAX cuộc gọi không đạt đến chức năng thành công. vì trình duyệt ngăn chặn Cross Site request. Nếu bạn xuất bản cả hai ứng dụng trong địa phương và gỡ lỗi, nó hoạt động tốt.

hy vọng điều này sẽ hữu ích cho ai đó.

0

Kiểm tra thông số url và đảm bảo thông số của nó giống với trang được tải. Bạn có thể đang thực hiện cuộc gọi ajax giữa nhiều miền. Nếu bạn muốn thực hiện cuộc gọi ajax giữa nhiều miền, hãy lưu ý rằng các dataTypes duy nhất được phép thực hiện các yêu cầu tên miền chéo là "script" và "jsonp".

Đã khắc phục sự cố này trong môi trường dev nơi URL là địa chỉ IP và trang đã tải tên miền trỏ đến ip đó.

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