从Javascript调用JSONP Ajax回调

时间:2012-09-19 17:10:45

标签: javascript ajax callback jsonp

我正在尝试发送JSONP Ajax请求(从client.htm到proxy.htm),该请求由代理页面接收,该代理页面为服务创建另一个不同的Ajax JSONP请求(proxy.htm ---> service.php)。目前代理页面从服务接收JSON格式对象,但我仍然坚持将对象返回到第一个初始Ajax请求。以下是我试图运行的示例代码。这可能与Javascript?如果是这样,我怎么能将对象返回到 clientCallback 函数。

Client.htm

// CLIENT ---> PROXY
$(document).ready(function () {
     $.ajax({
            type: 'GET',
            url: 'http://localhost/jsonp_proxy/listener.htm',
            dataType: 'jsonp',
            jsonpCallback: "clientCallback",
            success: function (theData) {
              alert("Success");
            },
            error: function (xhr, ajaxOptions, thrownError) {
              alert("Error");
            }
        });
      });
      window.clientCallback = function(results) {
        alert(results.uid);
      }

Proxy.htm

      // PROXY ---> SERVER
      $(document).ready(function () {
        $.ajax({
          type: 'GET',
          url: 'http://localhost/jsonp_server/service.php',
          dataType: 'jsonp',
          jsonpCallback: "proxyCallback",      
          success: function (theData) {
//          alert("Success");
          },
          error: function (xhr, ajaxOptions, thrownError) {
//          alert("Error");
          }
        });
      });
      window.proxyCallback = function(resultData) {
        // HOW TO CALL CLIENT CALLBACK FUNCTION
      }

Service.php

<?php
echo "proxyCallback("."{'uid': 123, 'username': 'jdirt', 'name': 'Joe Dirt'}".");";
?>

2 个答案:

答案 0 :(得分:0)

eval的几个半有效用途之一:

success: function (theData) {
  eval("(" + theData + ")");
  //alert("Success");

提醒一下,JSONP是一种黑客和安全风险。您对第三方给予了很多信任和控制。

答案 1 :(得分:0)

只需从window.proxyCallback调用window.clientCallback。