0

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 をコメントアウトすると、本文は正しく設定されますが、contenType はデフォルトに設定されます。

どうすればこれを機能させることができますか???

4

2 に答える 2

0

サーバー側がjsonをデコードしていない限り、オブジェクトはdataオブジェクトである必要があります。に変更してみてください

var temp_data = {"LevelOneString":"hello world","LevelTwoClass":{"LevelThreeClass":{"LevelThreeString":"Hello Level Three"},"LevelTwoString":"Hello Level Two"}};
于 2013-03-25T03:52:51.253 に答える
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 に答える