1

我是 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函数触发和萤火虫日志

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 日志

火虫

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回复后,我现在正在尝试在我的本地主机上使用这个代理页面,我请求的服务器需要某种登录,当我调用跨域ajax调用时工作正常(加载页面正常但有是我上面提到的某种解析错误),但我不知道当我使用代理时它没有响应完全相同的页面,有什么帮助吗?

4

1 回答 1

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 文件中看到的所有内容都是因为您需要将参数页面和 calltype 作为发布请求传递。

如果您想接收 html,JSONP 方法需要帮助

这个答案是 Tatu Ulmanen AJAX 跨域调用 和 pascal MARTIN如何使用 file_get_contents 在 PHP 中发布数据?

于 2013-04-29T23:04:13.827 回答