我的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吗?
有什么方法可以使它工作?
您可以尝试使用端口号(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的响应.
实现 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)
| 归档时间: |
|
| 查看次数: |
17043 次 |
| 最近记录: |