2017-01-24 157 views
0

我想创建一个jQuery/ajax脚本。其目的是从数据库获取数据,比较successFunc中的结果,并对mvc actionResult执行下一个ajax调用,这将根据结果呈现视图。由于某种原因,它不起作用。Ajax调用失败

function GetPageData() { 
$.ajax({ 
    type: "Post", 
    url: '/Track/GetPageData', 
    dataType: "json", 
    data: param = "", 
    success: successFunc, 
    error: errorFunc 
}); 
function successFunc(data, status) { 
    alert('data; '+data+', '+'status: '+status); 
    if (data == 'contact') { 
     $.ajax({ 
      type: "Post", 
      url: '/Track/Contact', 
      dataType: 'json', 
      success: successF, 
      error: errorF 
     }); 
     function successF() { 
      alert('services') 
     } 
     function errorF() { 
      alert('servicesFail') 
     } 
    } 

一个ActionResults方法:

public ActionResult Contact() 
    { 
     return View(); 
    } 

在调试过程中,我可以看到调用,以联系的ActionResult(),但它并没有渲染视图。任何想法为什么代码不工作?

+4

你还没有解释什么是不工作的,哪些错误消息的GET。一个是你得到一个'500内部服务器错误',因为你的第二个Ajax调用指定'dataType:'json',但是你的方法返回html(它需要是'dataType:'html'' - 或者只是省略选项并让ajax函数可以实现) –

+4

基本上,如果你请求JSON,你的服务器动作方法应该返回一个JSON字符串。返回整个视图违背了Ajax与JSON(这是为了保持数据传输很小)的整个使用点。 –

+0

@Stephen Muecke我想这样的代码会使HttpRequest'/ Track/Contact'并呈现所需的视图。这是我的预期,但它不起作用。 – Zet

回答

0

在第一次调用Ajax之后,您还没有结束GetPageData函数。下面把它写下来,并检查 -

function GetPageData() { 
    debugger; 
    $.ajax({ 
     type: "Post", 
     url: '/Track/GetPageData', 
     dataType: "json", 
     data: param = "", 
     success: successFunc, 
     error: errorFunc 
    }); 
} 
    function successFunc(data, status) { 
      $.ajax({ 
       type: "Post", 
       url: '/Track/Contact', 
       dataType: 'json', 
       success: successF, 
       error: errorF 
      }); 

    } 
    function successF() { 
     alert('services'); 
    } 
    function errorF() { 
     alert('servicesFail'); 
    } 
    function errorFunc() { 
     alert('servicesFail'); 
    } 
1

你的Ajax调用来获取视图应该遵循下面的模式,这是一个我用了一个密码重置:

$.ajax({ 
     url: '@Url.Action("ActionName","ControllerName")', 
     cache: false, 
     data: { userId: userId, newPassword: password }, 
     type: 'GET', 
     success: function (data) {       
      $('#unlockResult').html(data); 
     }, 
    }); 

行动看起来是这样的并返回一个PartialView

public async Task<ActionResult> UnlockUserAccount(string userId, string newPassword) 
    { 
    //other stuff here 
    return PartialView("_AjaxResponse"); 
} 

在AJAX调用的success一部分data参数是第ËHTML的PartialView,这是再注入的div我在页面:

<div id="unlockResult"></div> 

在我的情况下,PartialView返回位成功/失败被添加到现有的HTML页面。正如评论中所说,如果你想加载一个全新的页面,那么你不想使用Ajax。

0

最后我用它为我工作的解决方案:

function GetPageData() { 
$.ajax({ 
    type: "Post", 
    url: '/Track/GetPageData', 
    dataType: "json", 
    data: param = "", 
    success: successFunc, 
    error: errorFunc 
}); 
function successFunc(data, status) { 
    alert('data; '+data+', '+'status: '+status); 
    if (data == 'services') { 
     window.location = "/Track/Services"; 
    } 
    else if (data == 'contact') { 
     window.location = "/Track/Contact"; 
    } 
    else{ 
     window.location = "/Track/About"; 
    } 
} 

谢谢您的帮助

+0

ajax的全部用途是保持在同一页面上。要使用ajax然后使用'window.location'来进行重定向是无稽之谈。 –