0

I'm trying to access a control processor that has a built in web server. Based on the specific values that are programmed into the controller I am able to trigger actions through a website that resides on its built in server using jQuery or js. I'm having an issue though with the jQuery post command. When I use goggle's REST plugin everything works and I successfully get a response. Any ideas?

function GetVariableValuesByName(name) {
    $.post("http://10.10.254.11/RPC/", {
        method: "GetVariableValuesByName",
        param1: name,
        encoding: "2"
    }).done(function (data) {
        data = String(data);
        var info = data.responseText;
        alert(info);
    }).fail(function (data) {
        data = String(data);
        alert("error " + data)
    }).always(function (data) {
        data = String(data);
        alert("just in case " + data);
    });
}

Some additional examples the last function example assumes I've created the xmlhttp object.

function GetVariableValuesByName(name) {

$.ajax({
type: "POST",
url: "http://10.10.254.11/RPC/",
data: { method: "GetVariableValueByName", param1: "VOL_BAR", encoding: "2" }
}).done(function( msg ) {
    alert( "Data Saved: " + msg );
}).fail(function(msg) {
    alert("error " + msg)
});
}

function GetVariableValuesByName(name) {

xmlhttp.open("POST","http://10.10.254.11/RPC/",false);
var theString = "method=GetVariableValueByName&param1=" + name;
xmlhttp.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(theString);    
var wacivar = xmlhttp.responseText; 
wacivar = String(wacivar);
wacivar = wacivar.substr(19);

alert(wacivar);
}
4

1 回答 1

0

您正在使用同源策略,这意味着您虽然可以向另一个域发出 AJAX 请求,但您无法读取响应(这就是您的回调没有触发的原因)。这里的解决方案是使用CORS(在服务器端向 HTTP 响应添加额外的标头)或JSONP(使用 JSONP 回调进行自定义响应)。我建议您使用 CORS,因为它提供了更好的错误处理,而 JSONP 更像是一种 hack。

如果您想使用 CORS,请将 Wikipedia 文章中描述的标题添加到必须是跨域的响应中。

您要求提供解决方案的示例,但必须在服务器端为 JSONP 和 CORS 实施该解决方案。

于 2013-08-09T21:03:21.237 回答