XirSys $.ajax() method returned status 400, error: Could not validate application

XirSys $.ajax() method returned status 400, error: Could not validate application

我正在按照 Sam Dutton 教程开发自己的 webRTC 应用程序,我正在使用 xirSys 为我的点对点视频提供 TURN 服务器。但是 $.ajax() 方法并没有像我预期的那样 return 凭据、用户名、url。我也尝试使用 dataType: JSONP。 从 firebug 调试时 returned returned 的响应是:

{"p":"/getIceServers","s":400,"d":null,"e":"Could not validate application"}

无论如何我可以得到我的 url, username, credential as JSON 并直接在我的应用程序中使用它们而不会出现任何错误,因为即使 url 命中的状态为 200,仍然存在语法错误有时什么时候调用 $.ajax()

    $.ajax({
        type: "POST",
        url: "https://api.xirsys.com/getIceServers",
        data: {
            ident: "< xyz >",
            secret: "< something-like-my-token >",
            domain: "< www.mydomain.com >",
            application: "default",
            room: "default",
            secure: 1
        },
        success: function (data, status) {
            // data.d is where the iceServers object lives
            peerConnectionConfig = data.d;
            console.log(peerConnectionConfig);
        }
});

经过一番折腾,我终于发现使用jQuery的$.ajax()不如$.post(),或者只是我不明白。 无论如何,这是我的解决方法。

function()是一个成功回调,其中STUNTURN 服务器放在一个数组中,并按 RTCPeerConnection(server) 方法的要求使用。

$.post("https://api.xirsys.com/getIceServers", {
            ident: "your_username",
            secret: "XXX-XXXX-XXXX-XX",
            domain: "www.mydomainname.com",
            application: "default",
            room: "default",
            secure: 1
        },
        function (data, status) {
            console.log("Data: " + data + "nnStatus: " + status); //just for checking
            myResponse = data;
            turnServer = JSON.parse(myResponse);     //parsing to JSON because RTCPeerConnection() requires an object
            console.log(turnServer.d);    //d is the property that contains our STUN and TURN servers
            for (var i in turnServer.d.iceServers) {    //logic for STUN and TURN
                if(i == 0 ) {
                    STUN = turnServer.d.iceServers[i];
                    pc_config.iceServers.push(STUN);
                }
                if( i > 0 ) {
                    var turnUrl = turnServer.d.iceServers[i].url;
                    var turnSlice = turnUrl.slice(5,25);
                    TURN = {"url": "turn:" + turnServer.d.iceServers[i].username + '@' + turnSlice,
                        "credential" : turnServer.d.iceServers[i].credential }
                    pc_config.iceServers.push(TURN);

      }

调用 RTCPeerConnection(pc_config) 获取 STUN 和 TURN 服务器,否则它在 localhost 上工作正常,参数设置为 null