我是Jquery的新手,我试图将一些数据发布到跨域,我想处理一个完整的HTML页面的响应
我正在使用以下代码
$.ajax({
url: "http://www.somehost.com/abc/xyz.php",
type: "post",
data:{page: "123", calltype: "1"},
// crossDomain: true, I tried with using it as well
dataType:'html',
success: function(response, textStatus, jqXHR){
console.log(response);
},
error: function(jqXHR, textStatus, errorThrown){
console.log("The following error occured: "+textStatus);
console.log(jqXHR);
},
});
当我使用dataType:'html'
时,error
函数已触发,firebug日志与
POST http://www.somehost.com/abc/xyz.php 302 Moved Temporarily 231ms
The following error occured: error
Object { readyState=0, status=0, statusText="error"}
但是当我使用dataType:'jsonp'
时,再次error
函数被触发但这次HTML响应已成功加载但是有一些解析错误,我无法理解和firebug日志
消防BUG
The following error occured: parsererror
Object { readyState=4, status=200, statusText="success"}
SyntaxError: syntax error
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E
和html响应是正确的(因为我点击了firebug中的链接它正在打开)这是这样的
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="css/style.css"/>
<title>Welcome</title>
.
.
.
我想对这个html页面回复做一些工作,我不知道我做错了什么,请帮助我。
修改
检查@alkis回复后,我正在尝试在我的localhost上使用这个代理页面,我请求的服务器需要某种登录,当我调用跨域ajax调用(加载页面)时会工作罚款很好,但我上面提到了某种解析错误),但我不知道它在使用代理时没有响应完全相同的页面,有什么帮助吗?
答案 0 :(得分:2)
如果您希望响应是HTML而不是json,那么您将不得不使用这样的代理
$.ajax({
url: 'proxy.php',
type: 'POST',
data: {
address: 'http://www.somehost.com/abc/xyz.php',
page: "123",
calltype: "1"
},
xhrFields: {
withCredentials: true
},
success: function(response) {
console.log(response);
},
error: function(jqXHR, textStatus, errorThrown){
console.log(textStatus);
console.log(errorThrown);
}
});
使用服务器端脚本
$postdata = http_build_query(
array(
'var1' => $_POST['page'],
'var2' => $_POST['calltype']
)
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
echo file_get_contents($_POST['address'], false, $context);
您在.php文件中看到的所有内容都是因为您需要将paremeters页面和calltype作为帖子请求传递。
如果您想接收html
,JSONP方法需要帮助这个答案是Tatu Ulmanen AJAX cross domain call的混合 和帕斯卡尔·马丁How to post data in PHP using file_get_contents?