Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在回调函数中访问jQuery Ajax请求的URL_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 在回调函数中访问jQuery Ajax请求的URL

Javascript 在回调函数中访问jQuery Ajax请求的URL,javascript,jquery,ajax,Javascript,Jquery,Ajax,在使用jQuery执行Ajax请求时,有没有一种方法可以查看请求的URL e、 g var some_data_object={…各种垃圾…} $.get('/someurl.php',some_data_对象,函数(data,textStatus,jqXHR){ var real_url=?#我在文档中也找不到它。也许可以通过“代理”包装器将它添加到jqXHR对象中,如 我还没有测试过,所以你可能需要打电话 $.param()并连接到url。请参阅 用法: var some_data_obje

在使用jQuery执行Ajax请求时,有没有一种方法可以查看请求的URL

e、 g

var some_data_object={…各种垃圾…}
$.get('/someurl.php',some_data_对象,函数(data,textStatus,jqXHR){

var real_url=?#我在文档中也找不到它。也许可以通过“代理”包装器将它添加到jqXHR对象中,如

我还没有测试过,所以你可能需要打电话
$.param()
并连接到url。请参阅

用法:

var some_data_object = { ...all sorts of junk... }
myGet('/someurl.php',some_data_object, function(data, textStatus, jqXHR) {
   var real_url = jqXHR.origUrl;
})

在成功方法中设置一个断点,然后观察

this.url

是请求的真实url。

以下是一个可能的解决方案:

  • 捕获ajax调用,然后通过实现beforeSend回调函数将其发送到服务器
  • 保存url和数据
  • 在生成的错误消息中报告它

    var url = "";
    
    $.ajax({
      url: "/Product/AddInventoryCount",
      data: { productId: productId, trxDate: trxDate, description: description, reference: reference, qtyInCount: qtyInCount }, //encodeURIComponent(productName)
      type: 'POST',
      cache: false,
      beforeSend: function (jqXHR, settings) {
        url = settings.url + "?" + settings.data;
      },
      success: function (r) {
        //Whatever            
      },
      error: function (jqXHR, textStatus, errorThrown) {
        handleError(jqXHR, textStatus, errorThrown, url);
      }
    });
    
    function handleError(jqXHR, textStatus, errorThrown, url) {
       //Whatever
    }
    

  • 似乎ajaxSend全局处理程序()在其设置参数中提供了url。您可以在ajaxSend回调中存储从xhr对象到url的映射,然后在成功回调中查找它提供给您的xhr对象

    var mappings = {};
    
    $.ajaxSend(function(event, xhr, settings) {
       mappings[xhr] = settings.url;
    });
    
    $.ajax({
      url: "http://test.com",
      success: function(data, textStatus, xhr) {
        console.log("url = ", mappings[xhr]);
        delete mappings[xhr];
      }
    });
    

    这样做的优点是不必修改每个$.ajax()对象。

    使用
    $.ajaxPrefilter

    // Make sure we can access the original request URL from any jqXHR objects
    $.ajaxPrefilter(function(options, originalOptions, jqXHR) {
      jqXHR.originalRequestOptions = originalOptions;
    });
    
    $.get(
      'http://www.asdf.asdf'
    ).fail(function(jqXHR){
      console.log(jqXHR.originalRequestOptions);
      // -> Object {url: "http://www.asdf.asdf", type: "get", dataType: undefined, data: undefined, success: undefined}
    });
    

    仅供参考,作为对airbai评论的补充-我不能在他的回答中发表评论-您可以将自己的数据添加到呼叫中并在回调中检索。这样您就不必解析URL

    在这个示例JSONP请求中,我添加了变量
    user\u id
    (使用jQuery 3.2测试):


    如果所有其他方法都失败了,您可以从服务器端代码返回它,但我猜有一个更优雅的解决方案。有没有办法在发出实际请求之前找到这个解决方案?@sanz可能值得注意的是,现代浏览器可能会在XHR上崩溃。也就是说,看起来像@Chris正在寻找的解决方案,但对于您需要向用户报告或显示URL。而不是断点,只需
    console.log(this.URL);
    success
    回调中。也适用于错误部分。当您需要使用
    $确定问题是由哪个URL引起时。ajaxPrefilter
    是一个非常好的建议!+1在我看来,这是最好的方法,只需稍作改动。与所有带有错误报告的诡计不同,您只需在beforeSend函数中console.log或提醒URL。效果非常好。
    var mappings = {};
    
    $.ajaxSend(function(event, xhr, settings) {
       mappings[xhr] = settings.url;
    });
    
    $.ajax({
      url: "http://test.com",
      success: function(data, textStatus, xhr) {
        console.log("url = ", mappings[xhr]);
        delete mappings[xhr];
      }
    });
    
    // Make sure we can access the original request URL from any jqXHR objects
    $.ajaxPrefilter(function(options, originalOptions, jqXHR) {
      jqXHR.originalRequestOptions = originalOptions;
    });
    
    $.get(
      'http://www.asdf.asdf'
    ).fail(function(jqXHR){
      console.log(jqXHR.originalRequestOptions);
      // -> Object {url: "http://www.asdf.asdf", type: "get", dataType: undefined, data: undefined, success: undefined}
    });
    
    var request = $.ajax({
        dataType: "json",
        url: "http://example.com/user/" + id + "/tasks?callback=?",
        user_id: id,
        success: function(data) {
            console.log('Success!');
            console.log("User ID: " + this.user_id);
        },
        timeout: 2000
    }).fail(function() {
        console.log('Fail!');
        console.log("User ID: " + this.user_id);
    });