2012-01-20 32 views
6

Tôi có một cuộc gọi ajax đơn giản như thế này:jQuery.ajax trả jsonp thay vì json

$.ajax({ 
     url: u, type: "POST", dataType: "json", 
     data: data, 
     success: function (d) { response($.map(d, function (o) { return { label: o.Text, value: o.Text, id: o.Id} })); } 
}); 

Nó là một phần của một autocomplete tb mà không hoạt động trên chỉ có một cái nhìn. Lý do nó không hoạt động là thay vì json, nó làm cho yêu cầu jsonp (bằng cách đánh hơi tôi thấy rằng nó gọi thông qua url với ?callback=jQueryxxxxxxxxx), và hàm thành công không bao giờ được gọi vì jquery gói nó vào hàm ẩn danh có tên được chuyển trong gọi lại đối số và máy chủ trả về json chuẩn (Tôi không muốn sử dụng jsonp vì nó là yêu cầu POST và KHÔNG yêu cầu tên miền chéo). Tôi đã kiểm tra, cả url chế độ xem hiện tại và u đối số url ajax này là trên http://localhost:8080/myapp/areax/..., vì vậy tôi không thấy lý do tại sao jQuery đưa ra yêu cầu JSONP tại đây.

EDIT:

Xem trên mà điều này không làm việc đã yêu cầu url được thực hiện là như thế này: http://hostname:8080/AreaName/Report/ViewReport tham số và u của ajax giống như /AreaName/MyAutoComplete/Tìm kiếm, url để hoàn tất mà autocomplete được làm giống như http://hostname:8080/AreaName/MyAutoComplete/Search?callback=jQuery151013129048690121925_1327065146844

phản ứng server trông như thế này:

[{"Id":2,"Text":"001"},{"Id":7,"Text":"002"}] 

Tôi biết nó không phải là JSONP, cho rằng nó phải được

<script> 
jQuery151013129048690121925_1327065146844([{"Id":2,"Text":"001"},{"Id":7,"Text":"002"}]); 
</script> 

Nhưng tôi muốn thực hiện yêu cầu json bình thường, không JSONP.

CẬP NHẬT

điều kỳ lạ nhất của tất cả (tôi bắt đầu nghĩ rằng đó là một lỗi trong jQuery v1.5.1 được sử dụng trong dự án) là khi tôi loại bỏ dataType: "json", đưa ra yêu cầu json bình thường :)

vì vậy, thay vì làm thế nào để thực hiện yêu cầu json, bây giờ tôi sẽ chấp nhận một lời giải thích tại sao các công trình này như mong đợi (và một với datatype: "json" không):

$.ajax({ 
     url: u, type: "POST", 
     data: data, 
     success: function (d) { response($.map(d, function (o) { return { label: o.Text, value: o.Text, id: o.Id} })); } 
}); 
+0

Bạn có thể vui lòng cho url đầy đủ bao gồm bất kỳ thông số? – nnnnnn

+0

Bạn có thể thử khi 'u' có liên quan đến tên miền hiện tại của bạn hay không. Ví dụ:/myapp/areax/... – RvdK

+0

là một yêu cầu tên miền chéo? có thể là cùng một máy chủ nhưng cổng khác nhau? Thật lạ lùng ... –

Trả lời

2

Từ lỗi ở đây: http://bugs.jquery.com/ticket/8118

Có thể bạn đang sử dụng plugin xác thực jquery. Plugin Jquery-validation không tương thích với jQuery 1.5 và xung đột gây ra loại vấn đề bạn đang gặp phải ở đây.

Nếu vấn đề không phải là đặc biệt do plugin jquery-xác nhận, kiểm tra xem bạn có bất kỳ plugin jquery khác mà có thể không tương thích với jQuery 1,5

+0

Vâng, đây là vấn đề chính xác tôi gặp phải. Như tôi nghi ngờ, đó là lỗi trong jQuery :) Cảm ơn! –

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