如何张贴到其他领域,并在javascript中获得结果html
How to post to other domain and get result html in javascript
浏览器必须发送POST请求并从javascript接收结果html页面。服务器响应中没有Access-Control-Allow-Origin。
如果用户点击提交按钮,则返回响应属性。
尝试从javascript中使用:
$.ajax('https://example.com', {
data:
{
postkey: 'value'
}
method: 'POST',
async: false
})
.done(function (data, textStatus, jqXHR) {
alert(data);
})
.fail(function (xhr, textStatus, errorThrown) {
alert(JSON.stringify(xhr));
});
在chrome控制台返回异常:
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:52216' is therefore not allowed access.
我也试过jsonp
$.ajax('https://example.com', {
data:
{
postkey: 'value'
}
method: 'POST',
dataType: 'jsonp',
async: false
})
.done(function (data, textStatus, jqXHR) {
alert(data);
})
.fail(function (xhr, textStatus, errorThrown) {
alert(JSON.stringify(xhr));
});
在这种情况下,请求类型更改为GET, chrome控制台出现奇怪的错误:
Uncaught SyntaxError: Unexpected token <
Chrome开发工具显示,在这两种情况下,example.com服务器返回正确的html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="et">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="content-language" content="et">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
...
如何在客户端解决这个问题?我需要模拟点击表单提交按钮,并获得结果html页面。
使用Jquery、Bootstrap 3和Jquery UI。服务器端Apache使用Mono, mod_mono, asp.net MVC 4.6。可以在服务器端创建MVC控制器,调用这样的请求并返回结果。我正在寻找一种方法,从浏览器做到这一点,没有额外的应用程序自己的服务器调用。
** Update **
从我如何通过JavaScript发送跨域POST请求?jcubic answer I found sample:
还有一种方法(使用html5的特性)。您可以使用代理iframe托管在另一个域中,您使用postMessage发送消息到该iframe,然后该iframe可以做POST请求(在同一域)和postMessage返回给父窗口。
父节点
var win = $('iframe')[0].contentWindow;
win.postMessage(JSON.stringify({url: "URL", data: {}}),"http://reciver.com");
function get(event) {
if (event.origin === "http://reciver.com") {
// event.data is response from POST
}
}
if (window.addEventListener){
addEventListener("message", get, false)
} else {
attachEvent("onmessage", get)
}
iframe on reciver.com
function listener(event) {
if (event.origin === "http://sender.com") {
var data = JSON.parse(event.data);
$.post(data.url, data.data, function(reponse) {
window.parent.postMessage(reponse, "*");
});
}
}
// don't know if we can use jQuery here
if (window.addEventListener){
addEventListener("message", listener, false)
} else {
attachEvent("onmessage", listener)
}
这在http://www.ajax-cross-origin.com/how.html
中也有描述这将工作在当前的浏览器,这是合理的吗?是否有一些通用的方法或插件来实现这个?
除非您拥有您要发布的域名,否则您将无法发布到与发起请求的域名不同的域名。
您可以使用AJAX并在PHP脚本端运行curl post
相关文章:
- Javascript html每点击一次就会更改url
- 通过javascript/html访问twitter共享iframe
- 使用鼠标悬停JavaScript/HTML显示文本
- JavaScript-HTML表单到JSON(空值)和格式
- 使用javascript html实时预览文本区域输入
- 如何每秒从一个变量中提取一定次数的javascript/html
- 使用变量值作为'名称标识符'javascript/html
- JavaScript HTML Onclick
- 非侵入性Javascript HTML注入
- AppendChild Form / Table [Javascript/Html/PHP]
- 按钮don't使用onClick-Javascript HTML重定向
- 在库(javascript/HTML)中将“name”替换为“id”
- 如何确定使用 javascript/html 单击了哪个对象/图像
- 新的javascript HTML元素不遵循css规则
- JavaScript/HTML 错误的解决方案
- 从图像URL javascript html保存图像文件
- javascript html使用webstorage保存表单
- Javascript+HTML中的日期选择器准备好了吗?(需要:DD、MM、YY的单独字段加上日历选择器)
- 谷歌地图/融合表Javascript HTML赢得't显示/可视化所有多边形数据(通过色标)
- JavaScript/HTML命令行小部件