2014-03-27 60 views
0

我希望我的函數可以對控制器執行ajax調用,以便從響應中返回消息。函數不返回來自ajax調用的消息

我試過這個,但它不工作。如何實現我的目標?有更好的解決方案嗎?

var exists = personExists(); 

    if (exists != null) { 
     alert('The person already exists'); 
     return; 
    } 

var personExists = function() { 

    var exists = false; 
    var errorMsg = null; 

$.ajax({ 
     url: "@Url.Action("PersonExist", "Person")", 
     type: "POST", 
     dataType: 'json', 
     data: { name: self.name(), socialSecurityNumber: self.socialSecurityNumber() }, 
     async: false, 
     contentType: "application/json", 
     success: function (response) { 
      if (response.exists) { 
      exists = true; 
      errorMsg = response.message; 
      } 
     } 
}); 

if (exists) 
    return errorMsg; 

return null; 
}; 
+0

他設置了'async:false' ... –

+0

您是否能夠在控制器/操作方法中獲取調試點? – Savaratkar

回答

1

你可以用回調函數來做到這一點;

var personExists = function (callback) { 

    var exists = false; 
    var errorMsg = null; 

    $.ajax({ 
      url: "@Url.Action("PersonExist", "Person")", 
      type: "POST", 
      dataType: 'json', 
      data: { name: self.name(), socialSecurityNumber: self.socialSecurityNumber() }, 
      async: false, 
      contentType: "application/json", 
      success: function (response) { 
       if (response.exists) { 
       exists = true; 
       errorMsg = response.message; 
       callback(exists, errorMsg); 
       } 
      } 
    }); 

    if (exists) 
     return errorMsg; 

    return null; 
}; 

和用法;

personExists(function(exists, err) { 
    if (exists != null) { 
     alert('The person already exists'); 
     return; 
    }  
}); 

簡單地說,你可以通過existserrorMsg回調。請參閱here瞭解有關回調函數的更多詳細信息

+0

感謝您的回答,但即時通訊內部服務器錯誤。 – Henrik

+0

這意味着,你在c#代碼中得到的錯誤在後臺編碼 –

+0

是的,我知道這一點。它不會像控制器那樣在控制器中調用我的方法。 :( – Henrik

1

你需要使用一個回調:

function getErrorMessage(message) { 
    //do whatever 
} 

裏面的AJAX請求:

$.ajax({ 
    url: "@Url.Action("PersonExist", "Person")", 
    type: "POST", 
    dataType: 'json', 
    data: { name: self.name(), socialSecurityNumber: self.socialSecurityNumber() }, 
    async: false, 
    contentType: "application/json", 
    success: function (response) { 
     if (response.exists) { 
     exists = true; 
     getErrorMessage(response.message); //callback 
     } 
    } 

});