繁体   English   中英

如何从另一个域(跨域)获取由php脚本生成的html

[英]how can i get html generated by a php script from another domain(cross-domain)

我想知道如何获得由跨域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代码添加到我的网页(另一个域)。

使用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在我的例子1: 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"]
})

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);

这可以通过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) . ')';    
?>

您可以在域上设置代理,并使用CURL从其他域获取json。 然后,您将请求发送到此代理。

或者你需要设置另一个域来处理请求为jsonp,以便能够直接使用ajax访问

您必须使用JSONP或告诉其他站点的网站所有者添加Access-Control-Allow-Origin标头。

使用ajax访问跨域时,我也遇到同样的问题。 然后我通过对同一域进行ajax调用来解决它。 然后在那个PHP脚本上我应用以下代码块。 这将从cros域获取内容,并将其与ajax调用相同。

$content = file_get_contents('http://crossdomain.com');
    echo $content;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM