2009-01-29 21 views
9

Mã sau đây thực hiện đúng khi khóa dữ liệu không có dữ liệu để gửi, tức là dữ liệu: "{}" đối tượng JSON trống và webservice không có tham số. Tôi muốn đăng một số dữ liệu lên webservice nhưng tôi gặp sự cố.Gọi điện .Net webservice với Jquery đang gây ra sự khốn khổ khi cố gắng đăng dữ liệu

Khi tôi cố gắng thiết lập này để dữ liệu: "{ 'name': 'Niall', 'họ': 'Smith'}", tôi nhận được một lỗi

{"Message":"Invalid web service call, missing value for parameter: \u0027json\u0027.","StackTrace":" at System.Web.Script.Services.WebServiceMethodData.CallMethod(Object target, IDictionary`2 parameters)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary`2 parameters)\r\n at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"} 

Các webservice không được thực hiện.

Đây là cuộc gọi Jquery của tôi để đăng dữ liệu của tôi trở lại máy chủ.

$.ajax({ 
     type: "POST", 
     url: "/WebServices/BasketServices.asmx/AddItemToBasket", 
     data: "{'name':'niall'}", // Is this Correct?? 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: OnItemAddedSuccess 
    }); 
function OnItemAddedSuccess(result,eventArgs) { 
    //deserialize the JSON and use it to update the Mini Basket 
    var response = JSON.parse(result.d); 
} 

đây là WebService tôi

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
[System.Web.Script.Services.ScriptService] 
public class BasketServices : System.Web.Services.WebService 
{ 
    [WebMethod(true)] 
    public string AddItemToBasket(string json) 
    { 
     //do stuff 
     return myString.toJSON(); 
    } 
} 

Điều gì có thể vấn đề là gì? Có phải định dạng của dữ liệu JSON được đăng không? Nó có thể được rằng tôi đã không thiết lập các thuộc tính chính xác trên WebService của tôi. Điều gì về các vấn đề được đề cập đến trong Dave Ward's post

Tôi đã thử mọi thứ tôi có thể nghĩ đến. Có ai có ý tưởng nào?

Trả lời

12

Tôi nghĩ rằng webservice hy vọng tham số json được thiết lập. Hãy thử cuộc gọi này AJAX:

var data = {'name':'niall'}; 

$.ajax({ 
    type: "POST", 
    url: "/WebServices/BasketServices.asmx/AddItemToBasket", 
    data: "json=" + JSON.stringify(data), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: OnItemAddedSuccess 
}); 

nơi JSON.stringify() là một phương pháp giống như tìm thấy trong "chính thức" thực hiện: http://json.org/js.html

+0

+1, điều này giúp tôi vượt qua vấn đề của mình. Vì anh ta mong đợi json là một chuỗi và không phải là một loại phức tạp trong dịch vụ, nên thực sự là 'var data = {'json': 'niall'};' theo sau bởi 'dữ liệu: JSON.stringify (data),' later on . – DougJones

2

Điều này sẽ hiệu quả. Bạn phải vượt qua json như là một chuỗi, với một tên tham số 'json' (đó là giống như tên tham số trong phương pháp web của bạn.

data: "{json: '{\'name\':\'niall\'}'}",

+0

tôi đã được tìm kiếm này trong vòng 4 giờ bây giờ. Tại sao JSON.stringify không thể thêm điều này dựa trên tên biến javascript? – terjetyl

0

này luôn luôn xảy ra với tôi khi tôi làm không bao gồm dữ liệu chuỗi có dấu ngoặc kép

5

Giải pháp trên không có tác dụng đối với tôi. Vì vậy, thay vào đó tôi đã làm như sau. 1.) đảm bảo các đối tượng javascript-tài sản (ở đây ID và số lượng) có cùng tên và cùng loại (trong trường hợp này số == int) như các tham số của webservice của bạn 2.) không quấn đối tượng vào một đối tượng chuyển giao dữ liệu (DTO), nhưng thay vì chỉ stringify họ Nhờ đi Yasin Tarim đó đã cho các gợi ý tôi cần để có được nó làm việc

// javascript object 
var cartItem = {"ID": 123, "Quantity": 2} 

$.ajax({ 
    type: "POST", 
    url: "/WebServices/BasketServices.asmx/AddItemToBasket", 
    data: JSON.stringify(cartItem), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (data) { OnSuccess(cartItem, data); }, 
}); 
 
    // ASMX Server Side Code 
    [WebMethod(Description = "Add item to ShoppingCart")] 
    [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]   
    public string AddItemToBasket(int ID, int Quantity) 
    {    
     CartItem cI = new CartItem(); 
     cI.iD = ID; 
     cI.qty = Quantity; 
     CartItem.SaveToDatabase(ci); 
     return "foo from Webservice - it worked"; 
    } 
+0

"Không có hàm tạo tham số nào được định nghĩa cho loại" và "nguyên gốc JSON không hợp lệ" và "Cuộc gọi dịch vụ web không hợp lệ, thiếu giá trị cho tham số" là các thông báo lỗi tôi nhận được trong các kết hợp khác nhau của mình. – surfmuggle

+0

Có điều này làm việc cho tôi cũng ... Tôi đã phải thêm vào mã phía máy chủ mỗi biến theo loại và tên khác nó không hoạt động .. Ít nhất là không cho tôi, do đó, mỗi biến bạn có trong chuỗi json của bạn cần cũng được kết thúc. – IamCavic

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