2013-04-12 218 views
0

尝试此链接:http://humberinteractive.com/2013/api/index.php?fname=keoJquery.ajax()抛出错误

你可以看到,它以$ _GET [“FNAME”],并打印出我需要的内容。

我想:

$.ajax({ 
    type: 'GET', 
    url: 'http://humberinteractive.com/2013/api/index.php?fname=keo', 
    success: function(data) { 
     alert(data); 
    } 
}); 

但它不工作...

的jsfiddle:http://jsfiddle.net/3V8VP/

帮助帮助

+0

您以无用格式返回数据。你应该返回json或xml。 –

+0

什么不起作用? –

+3

[相同来源政策](http://en.wikipedia.org/wiki/Same_origin_policy)? – Musa

回答

0

在你的小提琴,它失败,因为跨域不允许原始ajax请求。常用的解决方法是使用JSONP代替。如果您的最终应用在同一个域上,这不会成为问题。 JSONP代码如下所示:

<?php 

    $data = array("some" => "data"); // make this part yourself 
    $callback_name = $_REQUEST["callback"]; 

    echo $callback_name . "(" . encode_json($data) . ")"; 

?> 

接下来,数据格式不可用。要将数据从PHP传递到Javascript,您应该使用JSON。用PHP,函数变换的阵列/对象到JSON格式是json_encode

最后,请确保在回答JSON对象时发送正确的MIME类型。 (PHP函数header()用正确的参数应该做的)

+0

http://jsfiddle.net/3V8VP/1/你可以看看并告诉我为什么它给我错误吗? –

+0

嘿,你返回的数据格式化为JSON格式;虽然这不是JSONP - 谷歌它得到一些例子(和我编辑我的答案与JSONP例子)。此外,请注意,如果您在'http:// humberinteractive.com'某个页面上的某个页面上运行JavaScript代码,则该代码将起作用。当网站上托管的页面通过AJAX呼叫另一个站点时,跨域来源只是一个问题(谷歌它也可以获取更多信息) –

0

如果你这样做在不同的领域,这可能会阻止作为同源策略。

那么你可以尝试使用JSONP这样做。

通过这种方式,指定dataType: "jsonp"为AJAX方法的参数,然后jQuery将创建您的成功方法的别名为xxxxxxxx和AJAX请求将与参数callback=xxxxxxxxxx发送。

在服务器端,你需要捕捉回调名称,并输出相同的JSON数据,现在你有回调的名称,如xxxxxxxxx({....})

最后你的客户端将直接运行这个这个输出。

例如:

JS:

$.ajax({ 
    type: 'GET', 
    dataType: 'jsonp', 
    url: 'http://humberinteractive.com/2013/api/index.php?fname=keo', 
    success: function(data) { 
     alert(data); 
    } 
}); 

服务器端,例如PHP:

<?php 
    // some logic ...... 
    $json_string = encode_json($data_you_wanna_output); 
    echo $_GET['callback'] ."(". $json_string .")"; 
?> 
+0

您能举一个例子吗? –

+0

我已经上传了我的回答:) –

0

试试这个:

$.ajax({type: "POST", 
     url: 'http://humberinteractive.com/2013/api/index.php', 
     data: {'fname': 'keo'} 
    }).done(function(data) {alert(data);});