【问题标题】:Troubles with JSONP RequestJSONP 请求的问题
【发布时间】: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


【解决方案1】:

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

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

警报会触发吗?

【讨论】:

  • 是的,我不认为 Firebug 会在堆栈中透露太多信息,但它至少可以让我跟踪代码的进程并让我知道它试图进入“成功”功能与否。可以试试。从 php 脚本向请求页面发送“alert('test')”会显示吗?我不需要以 JSON 格式对其进行编码,例如.. $callback.'("alert('test');" )';我可以试一试。感谢您的建议!
  • 太好了,你已经解决了,恭喜!只需快速回复您的 cmets。 alert('test'); 的原因应该触发的是,实际发生的是生成了一个
【解决方案2】:

我发现了问题所在。无论出于何种原因,我应该使用的回调是“JSONcallback”而不是“jsoncallback”。鉴于查尔斯的想法和我在另一个论坛上找到的关于大写“JSON”的建议,我想我会试一试。像魅力一样工作。谢谢你们的帮助!

【讨论】:

    猜你喜欢
    • 2013-04-25
    • 1970-01-01
    • 2011-07-12
    • 2017-04-22
    • 2013-09-15
    • 2013-11-09
    • 2012-10-07
    • 2011-06-24
    • 1970-01-01
    相关资源
    最近更新 更多