Javascript JQuery和XHR——使用CORS的跨站点JSON POST
我正在制作一个小UI,使用jQuery将JSON对象提交到外部CastIron服务器(服务器类型对这个问题并不重要)。初始发送工作正常,但我没有收到服务器的响应。以下是jQuery的外观: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
$.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