2011-10-20 42 views
13

Tôi không thể nhận được chức năng sau để hoạt động bình thường. Dường như nó đã được sắp xếp sai. Đây là lần lặp thứ 5 của các biến thể dữ liệu khác nhau. Ban đầu tôi chỉ làm dữ liệu: {'id': id} giống như tôi làm việc với WCF, nhưng với ASMX nó không hoạt động. Có vẻ như nó đang tuần tự hóa dữ liệu như id = 1234 thay vì id: 1234, nhưng tôi khá mới với điều này. Bất kỳ trợ giúp sẽ được đánh giá cao. Ồ, và tôi có thể gọi dịch vụ trực tiếp trong trình duyệt và nó trả về dữ liệu đúng cách để tôi biết đó không phải là dịch vụ.Nguyên thủy JSON không hợp lệ: id

function getVentID(id) { 
    //look up id in database and get VentID 
    alert('id: ' + id); 
    var jsdata = { "id": + id} 
    $.ajax({ 
     type: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     url: 'services/UserService.asmx/getVentID', 
     data: jsdata, 
     dataType: 'json', 
     success: function (msg) { 
      alert(msg.d); 
     }, 
     error: function (a, b, c) { 
      alert('Error: ' + a.toString() + ' ' + b.toString() + " " + c.toString()); 
     } 
    }); 
} 

p.s. Tôi biết có 10 câu hỏi giống hệt nhau nhưng không ai trong số họ có câu trả lời mà tôi có thể tìm thấy hoặc làm việc cho tôi.

Trả lời

30

Việc sửa chữa đơn giản nhất có thể sẽ có sự thay đổi bắt đầu var jsdata tới:

var jsdata = '{id:' + id + '}'; 

Vấn đề là jQuery được mã hóa jsdata như dữ liệu hình thức, không phải là json. Tham số dataType ảnh hưởng đến cách phản hồi được phân tích cú pháp, không phải cách dữ liệu POST được mã hóa.

Không thực sự có bất kỳ mã tuần tự JSON nào trong jQuery theo hiểu biết tốt nhất của tôi. Rõ ràng là John Resig suggests using Douglas Crockford's json2.js.

Để sử dụng nó, thêm một tài liệu tham khảo kịch bản để json.js và sau đó:

var jstext = JSON.stringify(jsdata, null, 2); 
+1

Vâng, về mặt kỹ thuật mà giải quyết được lỗi tôi được đăng, nhưng bây giờ tôi nhận được: không hợp lệ cuộc gọi dịch vụ web, thiếu giá trị cho tham số:. \ U0027ID \ u0027 "" StackTrace ":" tại System.Web.Script .Services.WebServiceMethodData.CallMethod ... v.v ... Bất kỳ ý tưởng nào? –

+0

Tôi đã cố gắng thay đổi các trường hợp kể từ khi lỗi mới nói ID thay vì id nhưng nó đã không giúp đỡ và tôi thậm chí không biết nếu đó là liên quan ... –

+0

Hmmm. Tôi thừa nhận tôi không hoàn toàn biết chính xác những gì asmx đang mong đợi. Ví dụ về những gì bạn làm trực tiếp trong trình duyệt của bạn hoạt động? Tôi chắc chắn có thể giúp dịch nó đến một cuộc gọi jQuery. – sblom

0

tôi giải quyết vấn đề này ngay bây giờ.

Bạn cần vượt qua url trong định dạng này:

http://domain.com.br/service.asmx/method?objParam= {q: "tìm kiếm"}

Và trong tập tin service.asmx, bạn cần khai báo các phương pháp này:

Public Function method(objParam As Dictionary(Of String, String)) 

End Function 

Trong mã của bạn, trông giống như:

function getVentID(id) { 
 
    var jsdata = { 
 
    "id": +id 
 
    } 
 
    var sData = JSON.stringify(jsdata); //convert your json in string 
 
    $.ajax({ 
 
    type: 'POST', 
 
    contentType: 'application/json; charset=utf-8', 
 
    url: 'services/UserService.asmx/getVentID', 
 
    data: { 
 
     id: sData 
 
    }, 
 
    dataType: 'json', 
 
    success: function(msg) { 
 
     alert(msg.d); 
 
    }, 
 
    error: function(a, b, c) { 
 
     alert('Error: ' + a.toString() + ' ' + b.toString() + " " + c.toString()); 
 
    } 
 
    }); 
 
}

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