我有一个函数,它使用ajax调用控制器方法
function CallService(data) {
$.ajax({
url: '@Url.Action("MyMethod", "MyController")',
type: 'GET',
dataType: 'json',
cache: false,
data: { 'serializedMessage': data }
});
MyMethod()返回一个复杂的对象,我需要在页面上显示一些属性。
<script>
$(function(){
// create inputData
function (inputData) {
var myItem = CallService(inputData);
$('#name').text(myItem.Name);
};
});
</script>
由于ajax没有返回任何内容,我在页面上收到错误消息'myItem is undefined'。任何人都可以解释如何返回变量并在JS函数中使用它吗?
答案 0 :(得分:3)
我很惊讶你无法在任何地方找到这样的例子,但是这里有:
有几种不同的方法可以定义在ajax调用完成时可以运行的回调,如http://api.jquery.com/jquery.ajax/中的文档所示。这是一个基于promises API的文章:
function (inputData) {
$.ajax({
url: '@Url.Action("MyMethod", "MyController")',
type: 'GET',
dataType: 'json',
cache: false,
data: { 'serializedMessage': inputData }
}).done(function(result) {
console.log(JSON.stringify(result)); //just for debugging, to see the structure of your returned object
$('#name').text(result.Name);
});
}
你需要掌握的一件事是ajax调用是异步运行的,所以你以前的结构不起作用 - 你不能直接从你的&#34; CallService&#34;包装器,哪种使它多余。你必须等到ajax调用完成,然后运行任何代码,这些代码取决于&#34; done&#34;中的结果(或在调用的函数内)。回调。
根据我链接到的文档,您还可以为任务定义其他回调,例如处理错误,如果您愿意的话。
答案 1 :(得分:0)
您必须使用success:function(response){ }