2011-03-03 78 views
3

我有以下的Ajax调用成功地执行:如何设置AJAX返回的值作为变量

function fnFormatDetails (oTable, nTr) 
    { 
      var aData = oTable.fnGetData(nTr); 

      var memberid = 'memberid='+ aData[6]; 

      $.ajax({ 
       type: "POST", 
       url: "shout.php", 
       data: memberid, 
       success: function(html) { 
        //$("#shout").html(html); 
        var sOut = html.returned_val; 
       } 
      }); 

      return sOut; 
     } 

如果我删除注释掉线($(“呐喊”)HTML(HTML)和使用在我的页面上显示一个div,结果显示正常,但是,第二个函数会使用sOut的HTML结果并相应地显示在正确的位置。

shout.php中的PHP文件只是'echos'HTML到页面(然后返回并相应地显示。

我不是幸好无法根据我的ajax调用的结果设置当前的变量sOut。我错过了什么?

+1

不确定为什么我的问题是downvoted?适当的成员谁这样做可能至少有礼貌解释 – JM4 2011-03-03 00:06:36

+0

你确定它实际上击中PHP服务器并给出适当的响应? – fazo 2011-03-03 00:45:24

+0

@fazo - 是的。如果它没有,带有(当前)注释的返回变量将无法正确填充。 $(“#shout”)表示一个基于从PHP脚本返回的html填充的div。 – JM4 2011-03-03 18:40:21

回答

5

如果您希望自己的函数返回AJAX调用返回的内容,则需要同步进行调用。另外,假设“shout.php”的结果是明文。如果是JSON或其他,则需要在拨打电话$.ajax时设置dataType属性。

function fnFormatDetails (oTable, nTr) { 
    var aData = oTable.fnGetData(nTr); 
    var memberid = 'memberid='+ aData[6]; 

    var result; 

    $.ajax({ 
     type: "POST", 
     url: "shout.php", 
     data: memberid, 
     async: false, 
     success: function(data) { 
      result = data; 
     } 
    }); 

    return result; 
} 
+0

感谢您的帮助。出于某种原因 - 结果不断返回'未定义'。如果我取消注释隐藏的div部分,数字会返回,因此我至少知道该调用正常工作 – JM4 2011-03-03 00:24:46

+0

有什么想法?我已经尝试了几乎所有的方式,而不是去。 – JM4 2011-03-03 21:40:48

+1

@ JM4 - 我是个白痴,我最初在这里写'async:true',当时我应该写'async:false'。我修复了我的答案。尝试改变你的代码。 – 2011-03-03 23:44:20

2

首先,您要在成功回调方法中定义sOut,因此它不适用于fnFormatDetails。

其次默认情况下$ .ajax以异步模式工作,因此无论何时调用“return sOut”,成功回调都不会执行!

我建议你从成功中调用一些方法来完成基于html.returned_val的过程,或者您可以在$ .ajax中传递async:false以使该调用同步。

+0

你的逻辑在第二段很有道理,但通过async:false进入ajax调用并不能解决问题。我不确定为什么成功回调方法不能真正在函数本身中使用细节。也许我没有完全理解,但评论的代码,如果取消注释,能够显示具有指定的“喊”div的内容,如果有任何呼吁 – JM4 2011-03-03 00:09:54

1

谢谢@马特哈金斯

异步:假

这个小代码更改,修复了自早晨,我遇到的问题。 :)

+0

也为我工作。非常感谢! – 2015-12-30 20:36:39

相关问题