2010-06-25 137 views
0

好的,我不是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"}) 

任何想法,我的严重错误是什么?

+0

您可能必须使用'jQuery.ajax()'和建设有所有已注册的可用回调的呼叫一些运气,又看见一个(或多个)被调用。 (换句话说,将它作为不带JSONP回调的常规ajax请求来尝试。) – Charles 2010-06-25 16:52:11

+0

尝试使用不同的回调函数并不是一个坏主意。不过,我仍然需要使用JSONP回调函数,因为具有普通回调函数的jQuery.ajax()不适用于不同的域。请求页面位于gkic.customerhub.net,我的php页面位于dankennedy.com。仍尝试不同的回调可能工作。感谢您的建议。 – 2010-06-30 14:20:06

回答

0

我想通了什么问题了。无论出于何种原因,我应该使用的回调是“JSONcallback”而不是“jsoncallback”。鉴于Charles的想法和我在另一个论坛上发现的关于“JSON”资本化的建议,我想我会试一试。像魅力一样工作。谢谢你们的帮助!

0

您将无法调试的Firebug的getJSON成功函数的代码,但是这预期。你应该看到什么(如果你看看FireBug中的源代码)是在html头部注入的脚本标记。这是否正确? 并尝试这样做,看看是否反应获得通过 - 返回一个字符串,如从服务器“警报(‘测试’)”:

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

是否警报火?

+0

是的,我不认为Firebug会在堆栈中显示很多内容,但它至少会让我追踪代码的进展,让我知道它试图进入“成功”的功能。 可以试试。从php脚本发送“alert('test')”到请求页面会显示出来吗?我不需要对它进行编码JSON格式,如.. $回调“(‘警报(‘测试’);’)”。 我可以试试看。感谢您的建议! – 2010-06-30 14:26:42

+0

很好,你已经解决了,恭喜!快速回复您的意见。alert('test')的原因;应该触发的是,实际发生的是一个

  • 11. JSONP请求与jQuery的外部域
  • 12. 问题与Alamofire请求
  • 13. 问题请求HTTPS与TCL
  • 14. 与bitbucket拉请求问题
  • 15. javascript jsonp url请求
  • 16. sencha touch jsonp请求
  • 17. 同步JSONP请求
  • 18. JSONP请求发出
  • 19. 解析来自Twitter api的jsonP请求的轻微问题
  • 20. 与@property相关的问题
  • 21. 与IndexOutOfRangeException相关的问题
  • 22. 与UIButton相关的问题
  • 23. 与UITextView相关的问题
  • 24. 与NSURLConnection相关的问题
  • 25. 与jquery相关的问题
  • 26. 与UNUserNotificationSettings相关的问题
  • 27. 与JComboBox相关的问题
  • 28. 与app_controller相关的问题
  • 29. 与GoToStateAction相关的问题
  • 30. 与UITabelViewCell相关的问题