如何在javascript中传递url回调函数中的参数

问题描述:

我有一个来自WordPress试图修改的WordPress插件的JavaScript文件。似乎越来越多的跨域请求带有某种漏洞。正是这种功能:如何在javascript中传递url回调函数中的参数

function urlCallback(url){ 
    var req = url; 
    var head = document.getElementsByTagName("head").item(0); 
    var script = document.createElement("script"); 
    script.setAttribute("type", "text/javascript"); 
    script.setAttribute("src", req); 
    head.appendChild(script); 
} 

传递的网址是一样的东西'http://url.com/page?callback=namespace.myFunction'其中myFunction是在脚本中别处定义的功能。

据我所知,这是在我的页面顶部插入源url,导致浏览器加载该页面。然后调用附加到该URL的回调函数,将结果作为单个参数传递给示例函数myFunction。

我的问题是,我需要调用myFunction为几个不同的独特的网址,但结果绑定到调用网址。 myFunction似乎在页面完成加载时被调用,所以我不能简单地保持它正在操作的数据集的计数。我需要一些方法让myFunction通过在回调url中编码的附加变量,或者myFunction知道它附加的url。

任何人都可以帮助我吗?

编辑:

为了进一步阐述,这里是我的代码的简化版本:

var parseUrls = (function(){ 
    function urlCallback(url){ 
    var req = url; 
    // Here is where I need to save the url 
    var head = document.getElementsByTagName("head").item(0); 
    var script = document.createElement("script"); 
    script.setAttribute("type", "text/javascript"); 
    script.setAttribute("src", req); 
    head.appendChild(script); 
    } 

    return { 
    options: {}, 
    parseNextUrl: function(result) { 
     if (!result || !result.data) { return; } 
     var data = result.data; 
     // Here is where I need the url 

    }, 
    parseUrl: function(result) { 
     if (!result || !result.data) { return; } 
     var data = result.data; 
     for (var i = 0; i < data.length; i++) { 
     urlCallback(data[i].url + "/new_url/page?callback=parseUrls.parseNextUrl"); 
     } 
    }, 
    showResult: function(options){ 
     urlCallback("http://start.url.com/page?callback=parseUrls.parseUrl"); 
     this.options = options; 
    } 
    }; 
})(); 

只是要清楚每当源请求完成,parseNextUrl被调用。这意味着所有的urlCallback调用都已经完成。

+0

你有没有例子说明它是如何在页面上实际调用的?你在看什么是“JSONP”的客户端实现(JSON-“padded”)。它会创建一个新的'

这是根据新提供的代码更新的代码。

var parseUrls = (function(){ 
    function urlCallback(url){ 
    // Create request 
    var head = document.getElementsByTagName("head").item(0); 
    var script = document.createElement("script"); 
    script.setAttribute("type", "text/javascript"); 
    script.setAttribute("src", req); 
    head.appendChild(script); 
    } 

    return { 
    parsers: [], //response handler array 
    options: {}, 
    parseUrl: function(result) { 
     //parseUrls.parseUrl.url = request URL 

     if (!result || !result.data) { return; } 
     var data = result.data; 

     // Create requests 
     for (var i = 0; i < data.length; i++) { 
     // Create new response handler 
     var parseNextUrl = function(result) { 
      // parseNextUrl.url = request URL 

      if (!result || !result.data) { return; } 
      var data = result.data; 

      // Check the URL 
      console.log('Result URL = ' + parseNextUrl.url); 
     }; 

     // Make callback names and URLs for each handler 
     var cbName = "parseUrls.parsers[" + this.parsers.length + "]"; 
     var req = data[i].url + "/new_url/page?callback=" + encodeURI(cbName); 

     // Save the URL in the handler 
     parseNextUrl.url = req; 

     // Put handler into storage. 
     // Note: Don't delete/insert any of parsers array element 
     // until no more new requests and all responses are received. 
     this.parsers.push(parseNextUrl); 

     urlCallback(req); 
     } 
    }, 
    showResult: function(options){ 
     this.parseUrl.url = "http://start.url.com/page?callback=parseUrls.parseUrl"; 

     urlCallback(this.parseUrl.url); 
     this.options = options; 
    } 
    }; 
})(); 
+0

感谢你回复杰伊。我不知道我明白这是如何工作的。除非我误解,否则namespace.currentURL将只包含urlCallback中设置的最后一个url。如果有帮助,我已经发布了更多我的代码。如果没有,谢谢你的帮助。 – Jordan 2012-08-15 23:42:38

+0

@Jordan:我已经更新了基于这个新代码的代码。 – Jay 2012-08-16 06:13:42