JS,执行顺序问题。

h422274755 2014-05-07 12:10:01
有如下代码:
function GetKnowledgeId()
{
var result = "";
$.ajax({
type: 'POST',
url: '@Url.Action("GetKnowledgeIdByName")',
data: { Descript: $("#inputId").val()},
success: function (returnValue) {
result = returnValue;
}
});
return result;
}

$(function () {
$("#OK").click(function(){
var r= GetKnowledgeId();
alert(r);
}
});



上述代码,点击OK按钮时,想得到GetKnowledgeId() 返回的结果。 但是由于JS执行顺序的问题。结果总是空值。得不到想要的通过AJAX返回后的值。
这个问题一直困惑着我,求大神解决。
...全文
800 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddwren 2014-05-13
  • 打赏
  • 举报
回复
写在回调里面吧 同步不好
别闹腰不好 2014-05-07
  • 打赏
  • 举报
回复
function GetKnowledgeId() { var result = ""; $.ajax({ type: 'POST', url: '@Url.Action("GetKnowledgeIdByName")', data: { Descript: $("#inputId").val()}, success: function (returnValue) { result = returnValue; } }); while(!result ){ } return result; } $(function () { $("#OK").click(function(){ var r= GetKnowledgeId(); alert(r); } }); 这样可以吧
h422274755 2014-05-07
  • 打赏
  • 举报
回复
#1 #2 同步确实能解决,谢谢。 #4的方式不行。 如果异步能解决吗?
龙的传人1988 2014-05-07
  • 打赏
  • 举报
回复
var result = ""; function GetKnowledgeId() { $.ajax({ type: 'POST', url: '@Url.Action("GetKnowledgeIdByName")', data: { Descript: $("#inputId").val()}, success: function (returnValue) { result = returnValue; } }); } function getValue(){ return result; } $(function () { $("#OK").click(function(){ GetKnowledgeId(); alert(getValue()); } }); 楼主试试这种方式,我没测试,你看看
别闹腰不好 2014-05-07
  • 打赏
  • 举报
回复
async: false,
别闹腰不好 2014-05-07
  • 打赏
  • 举报
回复
ajax 设置能同步的就可以了 。
打字员 2014-05-07
  • 打赏
  • 举报
回复
你這個問題涉及到的是異步請求的問題 一般來說,ajax都是異步請求,就是說當ajax發送一個請求到服務器的時候,js的執行并不會中斷,而是繼續向下執行的 所以,如果你想在后面的js中運用服務器對ajax回應的數據,那么有兩個方法: 1,將ajax的請求改成同步請求(怎麼改,baidu),不過這樣不是很好(為什麽不好,baidu) 2,把要運用服務器對ajax回應數據的js寫到ajax的回調中,這樣就沒有問題了 騷年,我看好你,加油!
KeepSayingNo 2014-05-07
  • 打赏
  • 举报
回复
异步回调实现,这里是讲的.net的,我看你是用的action,是java的,原理应该差不多 前端页面aspx

<%@ Register TagPrefix="cb" TagName="Callback" Src="~/Callback.ascx" %>
<script type="text/javascript">
        $(function () {
            PerformCallback();
       }
      function OnCallback1Complete(ret) {}
     function OnCallback1Error(ret) {
            alert(ret);
        }
<cb:Callback ID="Callback1" runat="server" ClientPerformCallback="PerformCallback" ClientCompleteEvent="OnCallback1Complete"
         ClientErrorEvent="OnCallback1Error" OnCallback="Callback1_Callback" />
后台.cs文件

protected void Callback1_Callback(object source, Callback.CallbackEventArgs e)
    { e.Result =你要传递的结果}
tony4geek 2014-05-07
  • 打赏
  • 举报
回复
楼上说的对,你除非写在 回调成功里面
  • 打赏
  • 举报
回复
引用 5 楼 h422274755 的回复:
#1 #2 同步确实能解决,谢谢。 #4的方式不行。 如果异步能解决吗?
异步100%不行,只能将后续代码放到回调里面

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧