jquery – Access-Control-Allow-Origin – localhost

前端之家收集整理的这篇文章主要介绍了jquery – Access-Control-Allow-Origin – localhost前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有通过ajax接收json的问题,错误在下面.根据我迄今为止发现的关于错误的信息,这似乎是某种跨域问题,但我不知道这是什么意思,以及如何解决这个问题.

响应头可能有问题(我自己创建了API并且没有以前没有经验),但是如果直接在浏览器中访问url,则会收到200 OK.

如果在浏览器中直接访问url有效的json,那么这不应该是问题.

这怎么可以解决

注意:该URL转到Apache服务器,而不是已在Stack上看到的有关问题的95%问题的文件.

督察错误

XMLHttpRequest cannot load http://localhost/api/v1/products?_=1355583847077.
Origin null is not allowed by Access-Control-Allow-Origin.
Error: error

代码

$.ajaxSetup ({
      url: "http://localhost/api/v1/products",// <--- returns valid json if accessed in the browser
      type: "GET",dataType: "json",cache: false,contentType: "application/json"
    })
    $.ajax({
        success: function(data){

            console.log("You made it!");
        },error: function(xhr) {
           console.log("Error: " + xhr.statusText);
       }
    }).done(function(data){
        console.log(data);
    })

PARAMS

_ 1355583610778

回应标题

Connection  Keep-Alive
Content-Length  3887
Content-Type    application/json
Date    Sat,15 Dec 2012 14:50:53 GMT
Keep-Alive  timeout=5,max=100
Server  Apache/2.2.14 (Unix) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l PHP/5.3.1 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By    PHP/5.3.1

请求标题

Accept  application/json,text/javascript,*/*; q=0.01
Accept-Encoding gzip,deflate
Accept-Language sv-SE,sv;q=0.8,en-US;q=0.5,en;q=0.3
Connection  keep-alive
Host    localhost
Origin  null
User-Agent  Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:17.0) Gecko/17.0 Firefox/17.0

响应

这里没有什么…

解决方法

尝试实施某种形式的 JSONP机制.如果你正在使用PHP,它可能是这样简单的东西…
/* If a callback has been supplied then prepare to parse the callback
 ** function call back to browser along with JSON. */
$jsonp = false;
if ( isset( $_GET[ 'callback' ] ) ) {
    $_GET[ 'callback' ] = strip_tags( $_GET[ 'callback' ] );
    $jsonp              = true;

    $pre  = $_GET[ 'callback' ] . '(';
    $post = ');';
} //isset( $_GET[ 'callback' ] )

/* Encode JSON,and if jsonp is true,then ouput with the callback
 ** function; if not - just output JSON. */
$json = json_encode( /* data here */ );
print( ( $jsonp ) ? $pre . $json . $post : $json );

所有这一切都将检查一个$_GET var称为回调,然后将输出包装在函数调用中 – 以$_GET [‘callback’]名称作为函数名称.

那么你的AJAX调用就像这样

$.ajax({
  type: 'GET',url: '/* script here */ ',data: /* data here - if any */,contentType: "jsonp",// Pay attention to the dataType/contentType
  dataType: 'jsonp',// Pay attention to the dataType/contentType
  success: function (json) {
    /* call back */
  }
});

当jQuery被赋予’jsonp’作为dataType / contentType时,它将为您提供一个回调函数名称,并设置回调函数等;意味着你不必做任何事情真的!

从jQuery文档:

“jsonp”: Loads in a JSON block using JSONP. Adds an extra “?callback=?” to the end of your URL to specify the callback. Disables caching by appending a query string parameter,“_=[TIMESTAMP]”,to the URL unless the cache option is set to true.

Source

结束时JSONP将是您最好的选择 – 我已经将PHP代码放在您的服务器端脚本使用PHP的机会上;如果不是,那么原则是一样的.不管服务器端技术如何,jQuery /客户端的东西保持不变. (一般来说)

祝你好运 :)

原文链接:https://www.f2er.com/jquery/176710.html

猜你在找的jQuery相关文章