0

我正在尝试调用一个接受 JSON 并以 JSON 响应的 .NET API。

我有一个 JavaScript 示例,它仅适用于 IE。

但是当我尝试将代码转换为 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,则正文设置正确,但 contenType 设置为默认值。

我怎样才能使这项工作?

4

2 回答 2

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);
    }
});
于 2013-03-25T04:01:30.440 回答
0

data对象应该是一个对象,除非服务器端正在解码 json。尝试更改为

var temp_data = {"LevelOneString":"hello world","LevelTwoClass":{"LevelThreeClass":{"LevelThreeString":"Hello Level Three"},"LevelTwoString":"Hello Level Two"}};
于 2013-03-25T03:52:51.253 回答