簡體   English   中英

與Jquery同步“ Ajax”調用似乎不起作用

[英]Synchronous “Ajax” Call with Jquery does not appear to Work

我對javascript很陌生,正在構建一個react / flux應用程序,並使用jquery向后端進行同步的“ ajax”調用(sjax?)。 我得到不一致的行為,因為(我認為)盡管使用async:false,我的ajax調用也沒有阻塞。 關鍵代碼片段如下。

執行流程從Flux存儲區以ActionTypes.LOGIN情況開始,然后移至fetchAccount(action.value);,然后應緊跟AppStore.emitChange();。

問題是如果我調用AppStore.emitChange(); 在$ .ajax成功函數中,我就可以保證AppStore.emitChange(); 在成功函數之后出現,否則,如果AppStore.emitChange()在fetchAccount(action.value)調用之后出現,它將在$ .ajax成功函數完成之前執行。

在我的Flux商店中,我調用一個輔助函數,然后發出一個更改:

// Register callback to handle all updates
AppDispatcher.register(function(action) {
  var text;

  switch(action.actionType) {
    case ActionTypes.LOGIN:
      fetchAccount(action.value);
      //if i put AppStore.emitChange(); here it's invoked 
      //before fetchAccount completes even though the $.ajax call is async: false
      AppStore.emitChange();
      break;

   //... code ommitted ...
  }
});

我的助手函數執行ajax調用:

function fetchAccount(email) {
  $.ajax({
    url: "http://www.foo.com/api/accounts/" + email,
    jsonp: "callback",
    dataType: 'jsonp',
    type: 'GET',
    async: false,
    headers: {"Accept" : "application/javascript; charset=utf-8"},
    success: function(data) {
      user = data;
      currentViewState = AppStates.CONTENT_VIEW;
      //AppStore.emitChange(); ---> if i emitChange here it works
    },
    error: function(xhr, status, err) {
      user = "";
      currentViewState = AppStates.LOGIN_VIEW;

    }    
  });
};

跨域請求和dataType:“ jsonp”請求不支持同步操作。 參見http://api.jquery.com/jquery.ajax/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM