Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用AJAX方法和PHP进行跨源资源共享_Php_Jquery_Ajax - Fatal编程技术网

使用AJAX方法和PHP进行跨源资源共享

使用AJAX方法和PHP进行跨源资源共享,php,jquery,ajax,Php,Jquery,Ajax,我刚刚开始处理对不同服务器中存在的php文件的调用。我知道CORS对于跨域请求至关重要。我一直试图通过ajax方法调用这个文件,参考了其他网站和教程,我看到了寻找解决方案的讨论,但它们对我不起作用。请帮忙 以下是我的调用方法: $.ajax({ type: "GET", url: "http://cs-server.usc.edu:27952/ResponseProg.php?callback

我刚刚开始处理对不同服务器中存在的php文件的调用。我知道CORS对于跨域请求至关重要。我一直试图通过ajax方法调用这个文件,参考了其他网站和教程,我看到了寻找解决方案的讨论,但它们对我不起作用。请帮忙

以下是我的调用方法:

            $.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文件时,我没有得到这样的错误