Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从另一个域(跨域)获取php脚本生成的html_Php_Jquery_Ajax_Json - Fatal编程技术网

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

如何从另一个域(跨域)获取php脚本生成的html,php,jquery,ajax,json,Php,Jquery,Ajax,Json,我想知道如何获得由跨域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); }

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

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


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

您必须使用或告诉另一个站点的网站所有者添加一个
access Control Allow Origin
头。

使用javascript,您可以像使用JSON一样进行操作,它被称为JSONP,P是带有填充的

或者您可以通过回调将其称为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
}
创建脚本标记并包含请求页面。确保在包含脚本标记之前定义回调

或者您可以使用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
    }
})

编辑以评论:

$.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);
    }  
});
JSON是正确的,对象通常以大括号开始

演示JSON:

{
    "myString": "myValue",
    "myOtherString": ["My", "Other", "Value", "This", "Is", "An", "Array"]
}
但是使用与JSONP相同的方法,您可以解析字符串,而不是以
{}
开头和结尾的奇怪东西

正如我的示例1中的
myCallback
一样:
myCallback(“这里我传递的是一个字符串而不是一个对象”)
。请参阅
<代码>“字符串在此插入”

如果它是JSON并使用我的演示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);

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

$content = file_get_contents('http://crossdomain.com'); echo $content; $content=file\u get\u contents('http://crossdomain.com'); echo$内容;
这可以通过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) . ')';    
?>


使用一个能够将
卷曲到外部域的php页面来获取数据,如果该页面不是php呢?我想使用javascript来实现这一点?这个答案很有帮助,但是我想,我怎么能用这个从php脚本中获取html内容呢?我以为JSON或JSONP是{'data','data'}格式的?\我理解你的技术。JS文件向curl.php发送请求,curl.php与JS文件位于同一个域中。然后curl.php将转到另一个域,该域将我的用户信息生成为HTML。但是,如果我不想在ajax中使用curl.php,该怎么办?如果我只想让javascript从另一个域获取html呢?这可能吗?我的意思是is curl.php必须与ajax所在的JS文件位于同一个域。@sm21guy yes必须位于同一个域。这不好,因为我想知道如何在同一个域上不使用php脚本和javascript。Javascript-->从不同域上的php脚本获取html代码