Php JSONP请求的问题

Php JSONP请求的问题,php,jquery,json,cross-domain,jsonp,Php,Jquery,Json,Cross Domain,Jsonp,好吧,我不是100%确定我做错了什么。也许我只需要第二双眼睛来揭示我的错误。我使用jQuery从一个域()向我域()上的PHP脚本发送一个JSONP请求,并从该脚本获得响应。我知道请求是有效的,因为出于测试目的,我正在将所有输入打印到一个文件中,然后再发送响应,数据就可以通过了。但是,无论出于何种原因,回调函数都无法工作 以下是jQuery代码: jQuery('#form1').validationEngine({ failure: false, success: function(){

好吧,我不是100%确定我做错了什么。也许我只需要第二双眼睛来揭示我的错误。我使用jQuery从一个域()向我域()上的PHP脚本发送一个JSONP请求,并从该脚本获得响应。我知道请求是有效的,因为出于测试目的,我正在将所有输入打印到一个文件中,然后再发送响应,数据就可以通过了。但是,无论出于何种原因,回调函数都无法工作

以下是jQuery代码:

jQuery('#form1').validationEngine({
 failure: false,
 success: function(){
  var url = 'https://dankennedy.com/test2.php?jsoncallback=?';
  jQuery.getJSON(url, jQuery('#form1').serialize(), function(){
   alert('I ran... for once');
  });

  return false;
 }
});
以下是PHP代码:

$callback = $_REQUEST['jsoncallback'];

$myFile = "info.txt";
$fh = fopen($myFile, 'w') or die("can't open file");

$data = '';
foreach( $_REQUEST as $key => $value )
 $data .= ", `".$key."` = \"".$value."\"";

$stringData = 'Array: ' . substr( $data, 1 );

fwrite($fh, $stringData);

$response = array( 'msg' => 'SUCCESS' );

$fullResponse = $callback.'('.json_encode($response).')';

fwrite($fh, "\n".$fullResponse );

fclose($fh);

header( 'Content-type: text/plain' );
echo $fullResponse;
最后,我将对代码做更多的处理,让我的PHP脚本访问我的数据库,并返回一些有意义的数据,让我的jQuery函数对这些数据进行一些处理。现在,我只是打印一些东西,并从小事做起,以确保通过JSONP进行的信息交换是有效的

一切看起来都很好。我也在关注Firebug中的代码,并了解代码是如何处理的。正在发出请求,但其中的警报语句未运行

这是正在写入的文件正在打印的内容:

Array 5:  `jsoncallback` = "jsonp1277479829087", `id` = "", `type` = "blog", `task` = "add", `title` = "Brace Ford", `date` = "June 25, 2010 11:30 AM", `author` = "", `teaser` = "Teaser", `body` = "Body", `download` = "", `comments` = "", `__utma` = "119149980.718135870.1277328038.1277328038.1277386321.2", `__utmz` = "119149980.1277328038.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)", `SESS6c0bc6ae4aee7e8c564bc45425742fc0` = "tpc7lmtv551kg1vpuvo2c9efi1", `__utmv` = "119149980.authenticated user,s1a", `mifge` = "DKFrontPage", `__utmc` = "119149980"
jsonp1277479829087({"msg":"SUCCESS"})

知道我的严重错误是什么吗?

您将无法在FireBug中调试getJSON成功函数代码,但这是意料之中的。相反,您应该看到的(如果您查看FireBug中的源代码)是注入html头部的脚本标记。这种情况正确吗? 然后尝试执行此操作以查看响应是否通过-从服务器返回一个字符串,如“alert('test”):

$fullResponse = 'alert("test")';
echo $fullResponse;

警报响了吗?

我知道问题出在哪里了。不管出于什么原因,我应该使用的回调是“JSONcallback”,而不是“JSONcallback”。考虑到Charles idea和我在另一个论坛上发现的关于利用“JSON”的建议,我想我应该试试。工作得很有魅力。谢谢你们的帮助,伙计们

使用
jQuery.ajax()
构建一个注册了所有可用回调的调用,并查看调用了哪些回调,可能会有一些运气。(换句话说,在不使用JSONP回调的情况下,将其作为常规ajax请求进行尝试。)尝试不同的回调是个不错的主意。但是,我仍然必须使用JSONP回调,因为带有普通回调的jQuery.ajax()不能跨不同的域工作。请求页面位于gkic.customerhub.net,我的php页面位于dankennedy.com。仍然尝试不同的回调可能会奏效。谢谢你的建议。是的,我不认为Firebug会在堆栈中透露太多,但它至少会让我跟踪代码的进程,让我知道它是否试图进入“on success”函数。我可以试试。只从php脚本向请求页面发送“alert('test')”会出现吗?我不需要用JSON格式编码,比如$回调。“(“警报('test');”);我可以试一试。谢谢你的建议!太好了,你解决了,恭喜!只是对你的评论的快速回复。警报(“测试”)的原因;应该激发的是,实际发生的是生成一个标签并将其插入头部。它的源是您在调用中指定的Url,因此如果您返回任何javascript命令,它将被视为与引用包含该命令的*.js文件相同,例如alert('test');就我们而言。当脚本被注入时,js代码就会运行。但这对于快速测试和调试来说是非常好的,再次祝贺您解决了这个问题!