Javascript JQuery和XHR——使用CORS的跨站点JSON POST

Javascript JQuery和XHR——使用CORS的跨站点JSON POST,javascript,jquery,ajax,json,jqxhr,Javascript,Jquery,Ajax,Json,Jqxhr,我正在制作一个小UI,使用jQuery将JSON对象提交到外部CastIron服务器(服务器类型对这个问题并不重要)。初始发送工作正常,但我没有收到服务器的响应。以下是jQuery的外观: $.ajax({ url: 'http://cirun2/Impact/CreateImpacts', type: "POST", data: JSON.stringify(myobj), dataType: 'text', as

我正在制作一个小UI,使用jQuery将JSON对象提交到外部CastIron服务器(服务器类型对这个问题并不重要)。初始发送工作正常,但我没有收到服务器的响应。以下是jQuery的外观:

$.ajax({
        url: 'http://cirun2/Impact/CreateImpacts',
        type: "POST",
        data: JSON.stringify(myobj),
        dataType: 'text',
        async: false,
        //beforeSend: function(xhr){
        //      xhr.setRequestHeader(
        //},
        complete: function(returned_data) {
                $('#output').append("<p>Submitted successfully to CastIron. Returned data: " + returned_data + "</p>");
        },
        error: function(error_text) {
                console.log("Update unsuccessful. Status: ", error_text);
        }
});
试试这个(模式)

更新

$(function () {
    var callback = function (results) {    
        $("#output")
        .append("<p>Submitted successfully to server. Returned data: " 
        + JSON.stringify(results.caseURL) + "</p>")    
    };
    var myobj = {
        "caseURL": {
            "caseURL": "https://cs18.salesforce.com/50060000008ugtSAAQ"
        }
    };

    var request = $.ajax({
        url: "/echo/json/",
        data: {
            json: JSON.stringify(myobj)
        },
        type: "POST",
        dataType: "json"
    });
    request.done(function (data, textStatus, jqxhr) {
        if (textStatus === "success" && jqxhr.responseJSON) {
            console.log(data, jqxhr.responseJSON, jqxhr.responseText);
            if (data.hasOwnProperty("caseURL")) {
                callback(data)
            };
        };
    });
    request.fail(function (jqxhr, textStatus, error_text) {
        if (textStatus != "success") {
            console.log("Update unsuccessful. Status: ", error_text, 
            textStatus, jqxhr.getAllResponseHeaders());
        };
    });
})
$(函数(){
var callback=函数(结果){
$(“产出”)
.append(“已成功提交到服务器。返回的数据:”
+JSON.stringify(results.caseURL)+“

”) }; var myobj={ “案例URL”:{ “caseURL”:https://cs18.salesforce.com/50060000008ugtSAAQ" } }; var请求=$.ajax({ url:“/echo/json/”, 数据:{ json:json.stringify(myobj) }, 类型:“POST”, 数据类型:“json” }); 完成(函数(数据、文本状态、jqxhr){ if(textStatus==“success”&&jqxhr.responseJSON){ log(数据,jqxhr.responseJSON,jqxhr.responseText); if(data.hasOwnProperty(“caseURL”)){ 回调(数据) }; }; }); 请求失败(函数(jqxhr,textStatus,error\u text){ 如果(textStatus!=“成功”){ console.log(“更新未成功。状态:”,错误\u文本, textStatus,jqxhr.getAllResponseHeaders()); }; }); })

data
dataFilter
processData


它最终成为来自CastIron服务器的不正确的头文件。我让CI管理员将返回代码修改为“200 OK”,并让她添加以下标题:

Access-Control-Allow-Origin: *    
Access-Control-Allow-Headers: X-Requested-With

结果发现她的回复并没有发送这些标题。在阅读了和之后,我能够找到答案。

POST请求的内容类型仅限于application/x-www-form-urlencoded、multipart/form data或text/plain for CORS

请参阅“访问控制方案示例”>“简单请求”


如果有错误,请更正。

无法在发布的图像上清晰地查看错误消息。如果可能,是否可以将错误消息文本发布到原始帖子?感谢您需要使用“jsonp”作为数据类型,或者尝试此链接@guest271314-对此表示抱歉。我删除了图像并粘贴了文本。很简单:你正在破坏it@epascarello-外部服务器能够接收我的JSON对象,这意味着什么吗?看起来很有希望,但返回“更新不成功”。状态:(空字符串)“”。我想要的字符串仍然在200后面,就像它在屏幕截图中一样。如果可能,可以发布请求
url
?来自服务器的响应
json
?谢谢,我不知道你的意思。URL是我的原始代码(
http://cirun2/Impact/CreateImpacts
),但只能从我们的网络访问。我期望的响应是在控制台中的'200'之后。它看起来是这样的:
{“caseURL”:{“caseURL”:https://cs18.salesforce.com/50060000008ugtSAAQ“}
”更新未成功。状态:'(然后是包含状态文本的对象:
“[异常…”故障”nsresult:“0x80004005(NS\u错误\u故障)”位置:“JS帧::http://myserver.mycompany.com/mr/js/jquery-1.11.0.min.js :.send::第4行“数据:否”
。与上面的错误相同。它捕获了“失败”条件。我认为我需要转换为JSONP。我已向CastIron管理员发送电子邮件,更改回复的外观,并将其包装在函数调用中。
Access-Control-Allow-Origin: *    
Access-Control-Allow-Headers: X-Requested-With