好的,我不是100%确定我在这里做错了什么。也许我只需要第二双眼睛来揭示我的方式错误。我送使用jQuery从一个域(https://customerhub.net)PHP脚本在我的域(https://dankennedy.com)JSONP请求并获得来自该脚本的响应。我知道请求正在工作,因为出于测试目的,我在发送响应之前将所有输入打印到文件,并且数据正在通过。但是,无论出于何种原因,回调函数都不起作用。与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"})
任何想法,我的严重错误是什么?
您可能必须使用'jQuery.ajax()'和建设有所有已注册的可用回调的呼叫一些运气,又看见一个(或多个)被调用。 (换句话说,将它作为不带JSONP回调的常规ajax请求来尝试。) – Charles 2010-06-25 16:52:11
尝试使用不同的回调函数并不是一个坏主意。不过,我仍然需要使用JSONP回调函数,因为具有普通回调函数的jQuery.ajax()不适用于不同的域。请求页面位于gkic.customerhub.net,我的php页面位于dankennedy.com。仍尝试不同的回调可能工作。感谢您的建议。 – 2010-06-30 14:20:06