Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.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
当请求相同的东西时,JSONP的Javascript值和PHP值不同?_Javascript_Php - Fatal编程技术网

当请求相同的东西时,JSONP的Javascript值和PHP值不同?

当请求相同的东西时,JSONP的Javascript值和PHP值不同?,javascript,php,Javascript,Php,当我执行以下操作时,我从PHP获得以下信息: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8gzip,deflate,sdchen-US,en;q=0.8,el;q=0.6,de;q=0.4 但是php文件响应中的警报(hello)是不同的,它是 */*gzip,deflate,sdchen-US,en 为什么会有这种差异?我需要通过JavaScript获得相同的PHP值 这是脚本 函数

当我执行以下操作时,我从PHP获得以下信息:

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8gzip,deflate,sdchen-US,en;q=0.8,el;q=0.6,de;q=0.4
但是php文件响应中的
警报(hello)
是不同的,它是

*/*gzip,deflate,sdchen-US,en
为什么会有这种差异?我需要通过JavaScript获得相同的PHP值

这是脚本


函数requestServerCall(url){
var head=document.head;
var script=document.createElement(“脚本”);
setAttribute(“src”,url);
head.appendChild(脚本);
head.removeChild(脚本);
}
功能httpAcceptResponse(数据){
var hello=data.token;
警惕(你好);
}
函数getHTTP(){
requestServerCall(“http://www.domain.com/httpaccept.php?callback=httpAcceptResponse");
}
getHTTP();
httpAccept.php文件

<?php
    $callback = $_GET["callback"];
    $headers = $_SERVER['HTTP_ACCEPT'].$_SERVER['HTTP_ACCEPT_ENCODING'].$_SERVER['HTTP_ACCEPT_LANGUAGE'];
    $jsonResponse = "{\"token\":\"" . $headers. "\"}";
    echo $callback . "(" . $jsonResponse . ")";
?>

这背后的问题是浏览器似乎没有在脚本的HTTP请求中提供
Accept
Accept Encoding
字段。(至少铬不会。)

至少对于
Accept
来说,这有点道理,因为在请求JavaScript文件时,您实际上不需要提供
Accept
字段-您希望请求的文件毕竟是一个JavaScript文件。然而,我也不理解
Accept编码的不足


要解决这个问题,您可能需要执行一个AJAX请求,该请求首先获取脚本代码,然后将其放入新创建的
标记的内容中。所以不要使用
src
,而是使用标签的内容。这应该是可行的,因为AJAX HTTP请求还应该包含
Accept
Accept Encoding
字段。

确实缺少一些有助于诊断此问题的代码。@ohgod为什么我现在用更多代码更新了我的问题,谢谢。不要用PHP手动生成JSON响应。使用
json\u encode()
@MikeBrant您能告诉我怎么做吗?您如何生成响应可能有问题。使用
$jsonResponse=json_编码(数组('token'=>$header))以创建对象文字。如果在此上下文中作为JS计算,JSON将是有效的对象文本。
<?php
    $callback = $_GET["callback"];
    $headers = $_SERVER['HTTP_ACCEPT'].$_SERVER['HTTP_ACCEPT_ENCODING'].$_SERVER['HTTP_ACCEPT_LANGUAGE'];
    $jsonResponse = "{\"token\":\"" . $headers. "\"}";
    echo $callback . "(" . $jsonResponse . ")";
?>