2012-03-14 41 views
0
function sendStates(data) { 
    var states = new Object(); 
    states.Id = 1; 
    states.Name = "Chandan"; 
    $.post("WebService.asmx/MultiDim/", states, function (data) { 
     alert("reached"); 
    }); 
} 

sendStates(null);

WebService的文件:

[WebMethod] 
     public void MultiDim(statesTemplate states) 
     { 

     } 

MultiDim功能犯规被调用。

+0

您是否正确设置了您的网址映射? – Igor 2012-03-14 20:17:39

+0

警报是否被触发?如果不是,那就意味着你没有正确连接,这反过来表明路径不正确。 “WebService.asmx/MultiDim /”与您调用URL的位置相同吗? – Steve 2012-03-14 20:18:48

回答

1

变化:

var states = new Object(); 
    states.Id = 1; 
    states.Name = "Chandan"; 

var object = {states: {Id: 1, Name: "Chandan" }} 
$.post("WebService.asmx/MultiDim/", object, function (data) { 
    alert("reached"); 
}); 

需要的方法,参数名称。您发送给.NET的对象需要方法参数名称才能解析您的请求。


[WebMethod] 
    public void MultiDim(statesTemplate states /* must be the javascript name too */) 
    { 

    } 

jQuery的不知道你的对象的变量名是states。它只是一个具有两个属性IdName的对象。

因此,添加一个属性为states的对象就是答案。

var objectToSendToNet = new Object(); 
objectToSendToNet.states = new Object(); 
objectToSendToNet.states.Id = 1; 
objectToSendToNet.states.Name = "Chandan"; 

$.post("WebService.asmx/MultiDim/", objectToSendToNet, function (data) { 
    alert("reached"); 
}); 
+0

这不是一回事......你的代码创建了一个包含“states”对象的“states”对象。你只需要分配{Id:1,Name:“Chandan”}部分。 – Steve 2012-03-14 20:35:59

+1

@Steve,正好。这不是一回事。我已更新清晰。 – Joe 2012-03-14 20:39:28

+0

哦,是的,是的,更新后的版本可以清楚地说明你的观点。道歉。 :) – Steve 2012-03-14 20:44:58

0

它是否对指定的网址发帖?有没有任何不同的JavaScript错误?到目前为止我看到1个可能的问题。您没有指定回调,例如:json,xml,其他将在function(){}部分帖子后面定义,但在()之内。所以它可能会忽略并输出,并跳过帖子中的函数来处理数据被发送回来。

我如何改变它以查看它是否工作的例子。

function sendStates(data) { 
    var states = new Object(); 
    states.Id = 1; 
    states.Name = "Chandan"; 
    $.post("WebService.asmx/MultiDim/", states, function (data) { 
     alert("reached"); 
    }, 'json'); 
} 

如果您还没有使用它,我也会建议您获取一个名为firebug的浏览器插件。它可以帮助您确定您可能遇到的许多潜在问题。

1

你的JS代码和WS共享相同的路径吗?尝试指定web服务的路径,并且包含对象的更简单的初始化。

function sendStates(data) { 
    var states = {Id: 1, Name: "Chandan"}; 
    $.post("/WebService.asmx/MultiDim/", states, function (data) { 
     alert("reached"); 
    }); 
} 

UPDATE: 你看了网络流量,以验证请求实际上是被发送到服务,或观看在控制台针对任何信息的反馈?

我实现没有问题,在所有的测试应用(减去web服务)以下内容:

function dataTest (data) { 
    console.info('Arrived in the dataTest function'); 
    var states = { Id: 1, Name: 'Dustin' }; 
    $.post("Home/SomeTest", states, function (data) { 
     console.info('Post complete, data below'); 
     console.log(data); 
     alert('here'); 
    }, 'json'); 
} 
var ob = [{ Id: 3, Name: "Test" }, { Id: 4, Name: "Testing"}]; 
dataTest(ob); 

更新2: 是你能验证功能实际上是获取调用,通过控制台或网络?在console.info中('这里有一些文字'),以确定你是否甚至把它变成你的函数。如果你正在把它变成你的功能,问题在于WebService。如果你没有完成这个功能,问题在于你的JS。

更新3: 我将首先验证您可以使用您发布的地址调用WebService,并且它按预期运行。如果通过: 如果调用是一个事件的结果并且它是相应的处理程序:我将首先从事件处理程序中进行跟踪,验证它是否确实正在触发,最后它将它发送到sendStates(数据)呼叫。 其他:设置断点并确认您正在进行sendStates(数据)调用。 如果您尚未使用Google Chrome,则可让Javascript在公园内散步。祝你好运!