【问题标题】:Hook and change ajax request挂钩和更改 ajax 请求
【发布时间】:2010-02-10 08:26:08
【问题描述】:

我是 JQuery 的新手。我正在使用一个封闭的框架,它允许我添加代码,但不能更改某些行为。 为了添加功能,我需要连接到特定的 Ajax 请求并将其重定向到我的 URL(以便我可以更改那里的数据并成为代理),或者在客户端更改请求的参数。

这可以用 JQuery 实现吗?如果有,怎么做?

在更新文本输入框后触发原始事件。


更新:

经过进一步检查,似乎文本框是使用 JQuery 自动完成插件操作的。我正在尝试翻译从此 ajax 请求返回的单词。基本上用户输入一种语言的文本,我想把它翻译成英文(翻译本身不是问题)所以自动完成将使用英文单词,然后我想从英文翻译成原始语言,到显示在文本框和悬停的 div 中。

【问题讨论】:

  • 我自己从未使用过该插件,但大多数 jQuery 插件的编写方式都可以使用原型对象来覆盖函数。如果您检查插件代码,我相信您应该能够找到要覆盖的函数并添加您自己的翻译代码。

标签: jquery ajax proxy


【解决方案1】:

我已经使用 jQuery 自动完成插件来做类似的事情,虽然不是在我处理“封闭框架”的场景中。

在自动完成对象初始化后,您将能够通过在自动完成对象上使用 .setOptions() 方法轻松完成您想要的操作。所以你的代码会变成这样(未经测试!伪代码!):

$(autoCompletedField).setOptions({
   formatItem: function(resultsRow, resultPosition, totalResults, inputWord) {
      // translate your menu items to be displayed in the drop down menu here
      // perhaps extend jQuery to handle $.translate(inputWord) ?
      return "<li>"+translatedWord+"</li>";
   }
}).result(function(event,selectedItem){
   // optionally do something more when the user selects one of those items here
   // translate the selectedItem back to another language? i dont know.
   return translatedItem;
});

查看选项:http://docs.jquery.com/Plugins/Autocomplete/autocomplete#url_or_dataoptions

【讨论】:

    【解决方案2】:

    我不认为有一个简单的解决方案可以解决您正在尝试做的事情,因为 XMLHTTPRequest 对象出于安全原因已完全关闭。

    如果幸运的话,执行 AJAX 请求的部分会分解为一个函数,您可以使用原型对象覆盖或覆盖该函数。

    如果没有,你最好挂钩文本框的更改事件。

    在 jQuery 中:

    $('#textboxid').unbind();
    $('#textboxid').change(function () {
        $.ajax({
             url: 'http://yourwebservice',
             data: {}, //the data to send to your webservice
             success: function (data) {
                 //do your magic
             };
        })
    });
    

    【讨论】:

    • @Oscar,在尝试使用您的代码后,我意识到我错了。查看我更新的 Q。
    【解决方案3】:

    你看过 javascript 中的观察者模式吗?我在我的博客上创建了一个示例。这可能会对您有所帮助。

    http://www.versomas.com/dannyg/post/Observer-pattern-in-Javascript.aspx

    【讨论】:

      【解决方案4】:

      使用谷歌翻译 jquery 插件。我过去曾非常成功地使用它来翻译文本:http://code.google.com/p/jquery-translate/

      【讨论】:

        【解决方案5】:

        您可以考虑在 AJAX 请求的“beforeSend”中实现您的代码吗?

        【讨论】:

          猜你喜欢
          • 2017-11-27
          • 2010-10-31
          • 1970-01-01
          • 2011-01-17
          • 1970-01-01
          • 2022-01-19
          • 1970-01-01
          • 2022-11-17
          • 2019-04-02
          相关资源
          最近更新 更多