如何将此IE AJAX代码转换为有效的jQuery AJAX调用?

时间:2013-03-25 03:50:09

标签: ajax jquery

我正在尝试调用接受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被设置为默认值。

我该如何工作?

2 个答案:

答案 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);
    }
});