我想知道如何获取由跨域php脚本生成的HTML代码?
通常如果我在同一个域上,我会按如下方式使用Ajax:
$.ajax({
type: 'GET',
url: 'user.php',
data: 'user_id=user_id', //assuming user_id value was already set.
success: function(html)
{
$('#info').empty().html(html);
}
});
但我现在正在处理与我的服务器域不同的域。这意味着我使用JSON将数据发送回我的服务器php脚本。 但是,我知道JSON只发送数据但不是完整的HTML代码(或者我错过了一些点吗?)
那么,我怎样才能将跨域php脚本(服务器)生成的html代码添加到我的网页(另一个域)。
答案 0 :(得分:2)
使用javascript你可以像JSON那样做,它叫做JSONP,P是with padding
。
或者您可以使用回调将其称为JSON:
//请求页面
myCallback("Some string or Object to parse to your site");
//你的页面
window["myCallback"] = function(string_or_object) {
// Here you can do everything with the parsed data
}
创建脚本标记并包含请求页面。确保在包含script-tag
之前定义回调或者您可以使用jQuery的ajax
方法,dataType
设置为jsonp
:
$.ajax({
"url": "requst_page.php",
"dataType": "jsonp",
"success": function(string_or_object) {
// Here you can do everything with the parsed data
}
})
查看http://remysharp.com/2007/10/08/what-is-jsonp/
编辑评论:
JSON是对的,通常以大括号{}
开头。
演示JSON:
{
"myString": "myValue",
"myOtherString": ["My", "Other", "Value", "This", "Is", "An", "Array"]
}
但是使用与JSONP相同的方法,您可以解析字符串,而不是以{}
开头和结尾的奇怪外观。
myCallback
:myCallback("HERE I PASS A STRING INSTEAD OF AN OBJECT")
。请参阅""
。 "STRING GOES IN HERE"
如果是JSON并使用了我的DEMO JSON,它将如下所示:
myCallback({
"myString": "myValue",
"myOtherString": ["My", "Other", "Value", "This", "Is", "An", "Array"]
})
答案 1 :(得分:1)
<强> JS:强>
$.ajax({
type: 'GET',
url: 'curl.php',
data: 'user_id=user_id', //assuming user_id value was already set.
success: function(html)
{
$('#info').empty().html(html);
}
});
<强> curl.php; 强>
function get_data($url){
$ch = curl_init();
$timeout = 5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$user_id = $_GET['user_id'];
$url= "http://www.example.com/user.php?user_id=".$user_id;
echo get_data($url);
答案 2 :(得分:0)
您可以在您的域上设置代理,并使用CURL从其他域获取json。然后,您将请求发送到此代理。
或者,你需要设置另一个域来处理请求为jsonp,以便能够直接使用ajax
答案 3 :(得分:0)
您必须使用JSONP或告知其他网站的网站所有者添加Access-Control-Allow-Origin
标题。
答案 4 :(得分:0)
使用ajax访问跨域时,我也遇到同样的问题。然后我通过对同一域进行ajax调用来解决它。然后在那个PHP脚本上我应用以下代码块。这将从cros域获取内容,并将其与ajax调用相同。
$content = file_get_contents('http://crossdomain.com'); echo $content;
答案 5 :(得分:0)
这可以通过jsonp完成。以下是一个例子。
$.ajax({
url: "example.com/respond.php",
data: {id: id},
dataType: "jsonp",
jsonp : "callback",
jsonpCallback: "jsonpcallback"
});
respond.php
<?php
header("content-type: application/json");
if (isset($_GET['id'])) $rtnjsonobj->id = $_GET['id'];
$rtnjsonobj->message = "This is the message from cross domain";
echo $_GET['callback']. '('. json_encode($rtnjsonobj) . ')';
?>