使用AJAX方法和PHP进行跨源资源共享
我刚刚开始处理对不同服务器中存在的php文件的调用。我知道CORS对于跨域请求至关重要。我一直试图通过ajax方法调用这个文件,参考了其他网站和教程,我看到了寻找解决方案的讨论,但它们对我不起作用。请帮忙 以下是我的调用方法:使用AJAX方法和PHP进行跨源资源共享,php,jquery,ajax,Php,Jquery,Ajax,我刚刚开始处理对不同服务器中存在的php文件的调用。我知道CORS对于跨域请求至关重要。我一直试图通过ajax方法调用这个文件,参考了其他网站和教程,我看到了寻找解决方案的讨论,但它们对我不起作用。请帮忙 以下是我的调用方法: $.ajax({ type: "GET", url: "http://cs-server.usc.edu:27952/ResponseProg.php?callback
$.ajax({
type: "GET",
url: "http://cs-server.usc.edu:27952/ResponseProg.php?callback=?", //Relative or absolute path to response.php file
datatype: "jsonp",
data: dataInput,
jsonp:'jsoncallback',
crossDomain:true,
success: function(data)
{
JSONObj = jQuery.parseJSON(data);
contentProvider("#rtrn");
if(JSONObj.ack != "No results found")
{
var paginate=setPager(0);
$("#pgn").html(paginate);
}
},
error: function() {
$("#rtrn").html("Data not retrieved successfully");
}
});
以下是我的PHP代码片段:
<?php
#code for data processing...
$rsltjson = json_encode($result,JSON_UNESCAPED_SLASHES);
echo $_GET['jsoncallback']."(".$rsltjson.");";
?>
我正试图通过使用JSONP来实现这一点。我应该有标题吗?
我的代码中有错误吗?…我如何才能做到这一点?dataInput是表单数据的序列化形式CORS方式
您需要在php脚本中放入适当的头并仅输出JSON:
<?php
header('Access-Control-Allow-Origin: *');
// rest of the code
// output JSON only
echo $rsltjson;
?>
因为它是作为脚本包含的,所以它将直接在页面中执行,调用前面定义的函数myDataFunc()
还要注意,php文件使用GET参数jsoncallback
,而javascript使用参数callback
调用url,这将不起作用
最后,使用jQuery.parseJSON()
,这会从代码中产生以下错误:
SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
原因可在以下文件中找到:
jQuery.parseJSON(json)描述:获取格式良好的JSON字符串并返回结果JavaScript值。
传入格式错误的JSON字符串将导致引发JavaScript异常 php脚本为回调提供JSON对象
{"a":"fhsfg","b":"qfdgers","c":"difgij"}
'{"a":"fhsfg","b":"qfdgers","c":"difgij"}'
而不是表示JSON对象的字符串
{"a":"fhsfg","b":"qfdgers","c":"difgij"}
'{"a":"fhsfg","b":"qfdgers","c":"difgij"}'
请注意周围的引号,这使该数据成为字符串。我们在php中通过在数据周围添加引号来解决此问题:
echo $_GET['jsoncallback']."('".$rsltjson."');";
显然,如果JSON数据包含单引号,则必须对其进行转义。您尝试过这种方法吗?您实际收到了什么错误?@spenibus:代码正常,但只执行了错误处理函数…我确实看到了您发送给我的链接…我知道我应该放标题,但我找不到.htaccess文件。如果不是,我不知道在httpd.conf文件中放哪个目录标记我使用了您为CORS提供的解决方案前面提到过,但我现在得到的错误是:SyntaxError:JSON.parse:JSON数据的第1行第1列出现意外的数据结尾。…但是当我的php文件与我的html代码位于同一位置时,不会发生这种情况。我相应地进行了更新。php脚本需要单独输出JSON@user3426359你应该实现spenbus写的东西,我可以确认它工作正常。糟糕的是,我忘了提到我返回的是JSON而不是JSONP。下面是从我的php文件返回json的代码<代码>$rsltjson=json_encode($result,json_UNESCAPED_SLASHES);echo$rsltjson代码>即使我同意spenibus的建议…但即使我只返回json,我也会收到上面提到的错误…如果我能解决这个问题,它会起作用。在我的php代码中还有什么我必须改变的吗?…当我执行我的本地php文件时,我没有得到这样的错误