不同端口上的jQuery Ajax

5 php ajax

我的php文件位于端口80(默认端口),而我的ajax调用位于端口8080上.

我的index.html在端口8080上

$(document).ready(function(){
$.get("userCheck.php", 
        {"username" : "lazy", "favcolor" : "FFFFFF" },          
        function(data){ alert("Data Loaded: " + data);
});
Run Code Online (Sandbox Code Playgroud)

我的PHP

$user = $_GET["username"];
if($user == "lazy")
    echo "SUCESS";
else
    echo "FAIL";
Run Code Online (Sandbox Code Playgroud)

我已经google了abit,JSONP大部分都是出来的.知道如何将其转换为JSONP吗?

有什么方法可以使它工作?

Dan*_*ski 8

您可以尝试使用端口号(http://myserver:[port]/userCheck.php)创建完整的URL ,但它不起作用.(同源政策)

在不同的端口上执行查询不应该使用JSONP,因为任何好的JSONP框架都会阻止它(或者至少它应该).JSONP的主要目标不是允许这些事情,它只是实现的副作用.

但是您可以在同一端口上创建"facade"PHP脚本index.html,然后执行查询到不同的URL并返回值.这样浏览器就不知道真实的URL.

index.html (8080) <--> myAjaxFacade.php (8080) <--> userCheck.php (80)

为此,您可以使用http-post-fields函数.

例:

$(document).ready(function(){
$.get("myAjaxFacade.php", 
    {"username" : "lazy", "favcolor" : "FFFFFF", 
     "realUrl": "http://serverwithdifferent:port/userCheck.php" },          
    function(data){ alert("Data Loaded: " + data);
});
Run Code Online (Sandbox Code Playgroud)

myAjaxFacade.php再往前的所有其它POST数据$_POST['realUrl']和返回来自该URL的响应.


CMS*_*CMS 1

实现 JSONP 服务非常简单,您只需要一个回调GET 参数,最后打印一个字符串,其中包含与以 JSON 数据作为参数的函数调用等效的内容:

$callback = $_GET["callback"];
$user = $_GET["username"];

if($user == "lazy") {
  $response = array("message" => "SUCESS");
} else {
  $response = array("message" => "FAIL");
}

echo $callback . "(". json_encode($response) . ");";
Run Code Online (Sandbox Code Playgroud)

然后你可以将它与 jQuery 一起使用$.getJSON

$.getJSON("jsonpTest.php?callback=?", { username: "lazy"}, function(json){
  alert("JSON Data: " + json.message); // SUCCESS
});
Run Code Online (Sandbox Code Playgroud)