【发布时间】:2011-03-08 08:41:50
【问题描述】:
好的,我不是 100% 确定我在这里做错了什么。也许我只需要第二双眼睛来揭示我的方式的错误。我正在使用 jQuery 从一个域 (https://customerhub.net) 向我的域 (https://dankennedy.com) 上的 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 中的代码,并查看代码是如何处理的。正在发出请求,但里面的 alert 语句没有运行。
这是正在写入的文件正在打印的内容:
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"})
知道我的严重错误是什么吗?
【问题讨论】:
-
你可能会幸运地使用
jQuery.ajax()并构造一个注册了所有可用回调的调用,并查看调用了哪些回调。 (换句话说,尝试将其作为没有 JSONP 回调的常规 ajax 请求。) -
尝试不同的回调不是一个坏主意。但是,我仍然必须使用 JSONP 回调,因为带有普通回调的 jQuery.ajax() 不能跨不同的域工作。请求页面位于 gkic.customerhub.net,我的 php 页面位于 dankennedy.com。仍在尝试不同的回调可能会起作用。感谢您的建议。
标签: php jquery json cross-domain jsonp