2012-04-16 89 views
2

我试图用Ajax调用CFC组件。但我需要将CFC返回的值传递给我的JavaScript例程。当我在警报中显示msg时,done函数会创建正确的消息。但ret变量永远不会使用该值填充。我需要返回的值来更改JavaScript数据流。从ColdFusion CFC返回的值使用JQuery Ajax调用

我在做什么错?

var ret = $.ajax({ 
       type: "post", 
       url: "cfc/CFCSemae.cfc", 
       data: { 
        method: "verificaCadastro", 
        returnformat: "plain", 
        queryformat: "column", 
        nro_cadastro: num_cad 
     }, 
     dataType: "html", 
     }).done(function(msg){ return msg; }); 

alert(ret); 
+0

这功能并不怎么回调工作。而不是'return msg;'在'.done'函数中执行:'ret = msg;' – MilkyWayJoe 2012-04-16 19:46:29

+0

我也使用'success'和'error'回调代替'done'或'complete' – MilkyWayJoe 2012-04-16 19:48:01

+0

尝试这一点,但现在我只得到ret = undefined ...如果我警告(味精)里面做功能,我得到的价值...如果我做ret = msg里面的ajax调用和外部alert(ret),我得到undefined X_x – lagranzotto 2012-04-16 19:50:50

回答

0

AJAX是异步的,你不能从回调中返回一个值而不进行同步调用。你真的不想那样做。

为成功提供回调函数:handler。您可以在那里添加逻辑,将返回的数据放入JavaScript流中。

2

下面的代码应该为你做,但了解,当你在做异步请求时,你只会在回调执行时得到结果。你的代码将简单地称为$.ajax函数,但它不会等待响应(如果它在不同的线程中)。当响应准备好时,执行回调complete。如果响应返回成功消息(HTTP状态200),则调用success回调,否则调用error

//somewhere in your script 
var ret = ''; 

// then at the ajax request 
$.ajax({ 
    type: "post", 
    url: "cfc/CFCSemae.cfc", 
    data: { method: "verificaCadastro", returnformat: "plain", 
      queryformat: "column", nro_cadastro: num_cad }, 
    dataType: "json", 
    contentType: "application/json; charset=utf-8", // make sure your serverside function can return json 
    success: function(data) { 
     //your own validation to check whether 'data' is a valid response 
     ret = data; 
    }, 
    error: function(xhr, msg) { 
     // handle error 
    } 
}); 

请阅读以下关于ajax编程的文章。这会给你一个更好地了解异步编程是:http://en.wikipedia.org/wiki/Ajax_(programming

编辑:纠正拼写错误