2013-04-22 41 views
2

我需要提交一个简单的表单并验证模型。如果模型有效,我想序列化该模型并通过POST将其发送到使用自定义标头的外部(https)Web服务。最后,我会处理从请求中取回的响应并显示相应的消息。MVC4模型验证然后使用JQuery将JSON发布提交给外部URI

我从控制器完美地验证模型并序列化对象,但似乎无法找到创建到外部URI的JSON发布请求的方式。有没有办法使用JQuery.ajax或$ .post来做到这一点。也许我错过了一个关键的ajax参数来实现这一点。

感谢

+0

如果已将其传递给控制器​​和模型验证,得到了,系列化,可您随后从控制器外部调用?你为什么要求ajax方式,这意味着你首先从你的控制器返回结果,然后进行外部呼叫? – 2013-04-22 01:45:53

+0

@von v。我需要知道如何在模型验证完成后使用控制器的自定义头创建请求。应处理响应,并在窗体上显示相应的消息(失败/成功)。 – Will 2013-04-22 13:24:12

+0

如果你在你的控制器上做了一个ajax post,验证这个对象,把它序列化并返回。所以你可以使用它,然后为你的ajax发布到外部URL,这是否符合你的要求?如果是的话,那么你也问在你做外部邮件之前如何包含自定义标题? – 2013-04-22 13:29:02

回答

2

因此,基于澄清这个问题是你可以做什么:

定义控制器的方法,将验证对象

public ActionResult TestMethod() { 
    // do server-side validation 
    return Json(aValidObject); 
} 

你做一个AJAX张贴到您的控制器,这样你就可以验证你的模型,然后得到一个json结果。

$.ajax({ 
    url: '@Url.Action("TestMethod")', 
    data: some_data, 
    type: "post",   
    success: function (result) { 
     // result is a valid json object 
     doExternalPost(result); 
    } 
}); 

添加自定义页眉和做外部后

function doExternalPost(o) { 
    $.ajax({ 
     url: 'http://some_external_url', 
     data: o,   
     dataType: 'json', 
     beforeSend: function (xhr) { 
      xhr.setRequestHeader('custom_header', 'some_value'); 
     }, 
     success: function() { 
      // post is sucessful 
     }, 
     error: function (xhr, errorType, exception) { 
      var errorMessage = exception || xhr.statusText || xhr.responseText; 
      alert('An error has occured: ' + errorMessage); 
     }, 
    }); 
} 
+0

这“完全”是我所需要的。我试图从应用程序中提出要求,比要求的要难得多。谢谢!! – Will 2013-04-22 15:04:32

+0

不客气。 – 2013-04-23 00:41:27

1

试试这个

var data = {jsonDataObjectHere}; 

var request = $.ajax({ 
    url : 'externalUrl.com/something.whatever', 
    type : 'POST', 
    data : data // see above 
}); 

request.success(function(response){ 
    // the response is the stuff from the server 
}); 

我困了所以请原谅错别字

好运

编辑:为一点澄清,与MVC你真的不需要到序列化json对象,mvc会按原样接受它。