我正在尝试调用接受JSON并使用JSON响应的.NET API。
我有一个只运行IE的javascript示例。
但是当我尝试将代码转换为jQuery / AJAX调用时,我无法使其工作。
我已经尝试过所有我认为没有成功的参数组合。
这是可行的IE代码。
<script language="javascript" type="text/javascript">
var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
function callService() {
var url = "http://hrdtssiw01:8700/JsonWCF/DoJsonWork"; //use this url on RDN server for access.
var body = '{"LevelOneString":"hello world","LevelTwoClass":{"LevelThreeClass":{"LevelThreeString":"Hello Level Three"},"LevelTwoString":"Hello Level Two"}}';
xmlHttp.open("POST", url, true);
xmlHttp.setRequestHeader("Content-type", "application/json");
xmlHttp.send(body);
}
// Create result handler
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
alert('working!!!!');
document.getElementById("Text1").value = xmlHttp.responseText;
}
}
</script>
这是jQuery代码......
<script>
function callAjax() {
jQuery.support.cors = true;
var temp_url = 'http://hrdtssiw01:8700/JsonWCF/DoJsonWork';
var temp_data = '{"LevelOneString":"hello world","LevelTwoClass":{"LevelThreeClass":{"LevelThreeString":"Hello Level Three"},"LevelTwoString":"Hello Level Two"}}';
$.ajax(temp_url,
{
'type': 'POST',
'data': temp_data,
'dataType': 'json',
'processData': false,
//'contentType': 'application/json; charset=utf-8',
'headers': {'contentType':'application/json'},
'success': function(data) { alert('data: ' + data); },
'error': function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
}
$(document).ready(function() {
$('#thebutton').click(function() { callAjax(); return false;});
});
</script>
在jQuery示例中,我将contentType注释掉了。
如果我包含contentType,请求将作为JSON发送,但未设置正文。 如果我注释掉了contentType,则正确设置了body,但是contenType被设置为默认值。
我该如何工作?
答案 0 :(得分:0)
data
对象应该是一个对象,除非服务器端正在解码json。尝试更改为
var temp_data = {"LevelOneString":"hello world","LevelTwoClass":{"LevelThreeClass":{"LevelThreeString":"Hello Level Three"},"LevelTwoString":"Hello Level Two"}};
答案 1 :(得分:0)
如果您使用的是跨域请求,则需要使用支持CORS的浏览器(IE不支持),然后尝试
$.ajax(temp_url, {
'type' : 'POST',
'data' : temp_data,
'dataType' : 'json',
'processData' : false,
'contentType' : 'application/json',
'success' : function(data) {
alert('data: ' + data);
},
'error' : function(xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});