2014-09-26 32 views
0

我試圖發送帶有井號標籤到服務器的URL後,像

/example.php?var1=tes#t & VAR2 =數值

如果我跟蹤的beforeSend功能的URL我看到網址是唯一

/example.php?var1=tes

並且刪除了哈希標籤和包含標籤之後的所有內容。如果我在使用$ .get()函數之前將hashtag編碼爲%23,則一切正常。

下面是一個示例代碼。

$.ajaxSetup(
    { 
     scriptCharset: "iso-8859-1", 
     contentType: 'Content-type: text/plain; charset=iso-8859-1', 
     cache: true, 

     //zuerst alles encodieren, damit server keine fehler bekommt 
     beforeSend: function(xhr, data) 
     { 
      //wrong url 
      console.log(data.url); 
     } 
    }); 

    //right url 
    var link = "/example.php?var1=tes#t&var2=value2"; 
    $.get(link).done(function() 
    { 
     console.log("done"); 
    }) 

編輯:

服務器解碼與ISO-8859-1的網址,所以我需要將數據編碼爲iso。我在beforeSend函數中編寫了一個腳本,它自動將url轉換爲iso,但它不能轉換hashtag,因爲data.url變量不包含hashtag。所以我需要在$ .ajaxSetup函數中訪問完整的url(包含hashtag)。

回答

0

在#後的字符被視爲一個散列,而不是查詢字符串的一部分。您需要編碼特殊字符。你應該使用encodeURIComponent來完成它。

但是好的是jQuery的get方法內置了$ .param()方法,它將爲您執行轉換。

var link = "/example.php"; 
$.get(link, { "var1" : "tes#t", "var2" : "value2" }). done(...); 
+0

這個問題複製代碼$ .parm()方法使用UTF-8編碼,但我需要iso。 – Lemontree87 2014-09-30 12:52:52

+0

我解決了我的問題。我使用你的答案,並且我在beforeSend方法decodeURIComponent()中編寫了附加內容來解碼UTF-8編碼參數。然後我使用我的腳本將字符串轉換爲iso。一切正常。 – Lemontree87 2014-09-30 13:33:29

2

應用encodeURIComponent()你的URL字符串

+0

這是一個好主意,但encodeURIComponent()將我的字符串編碼爲UTF-8,但服務器使用iso解碼。 encodeURIComponent(「ä」) - >「%C3%A4」。我可以使用.replace將散列更改爲iso代碼,但是我必須使用數百個url來完成此操作,並且我嘗試編寫較少的代碼。 – Lemontree87 2014-09-30 07:27:24

+0

從你的代碼假設PHP,使用[urldecode()](http://php.net/manual/en/function.urldecode.php) – 2014-09-30 08:32:59

+0

該服務器沒有使用PHP。我的代碼只是一個例子。此外,我沒有訪問服務器,所以我需要用Javascript來解決這個問題。 – Lemontree87 2014-09-30 08:45:08

1

網址無效/畸形。

#標籤必須是網址的最後部分

標籤不是HTTP請求的部分,因此必須根本不在其中。

你不能把主題標籤中的URL中,只有一個模式:

prot://domain/resource?parameter1=value1&parameter2=value2#fragment_identifier 

如果下面的都不行,它不會在所有的工作:

/example.php?var1=test&var2=value2#hashval 

當使用URI引用對 標識的資源執行檢索操作時,可選片段標識符(與 分開)由交叉陰影(「#」)字符組成,由添加在 檢索操作已成功完成後,用戶代理將解釋的參考信息。因此,它不是 URI的一部分,但通常與URI結合使用。

http://www.w3.org/blog/2011/05/hash-uris/

證明: - :

[26 /月/ 2014請求的URL http://flowl.info/test#test

的片段標識符(#)的HTTP請求中不使用:14:11:10 +0000]「GET /test HTTP/1.1」200 988「 - 」「Mozilla/5.0(Windows NT 6.1; WOW64; rv:32.0)Gecko/20100101火狐/ 32.0"

另一個證明:

上傳包含<?php phpinfo();到你的服務器和接入一個PHP文件與#fragment_identifier ...在生成的信息,是不是曾經提到的哈希值。 因爲對於服務器,它甚至不存在。

0

正如@路易吉 - 貝利建議:適用encodeURIComponent方法()

或者將您的網址查詢參數有你的電話是這樣:

$.ajaxSetup({ 
     scriptCharset: "iso-8859-1", 
     contentType: 'Content-type: text/plain; charset=iso-8859-1', 
     cache: true, 
     data: { 'var1' : 'test#t', 'var2' : 'value2' } 

     //zuerst alles encodieren, damit server keine fehler bekommt 
     beforeSend: function(xhr, data) 
     { 
      //wrong url 
      console.log(data.url); 
     } 
    }); 

    //right url 
    var link = "/example.php"; 
    $.get(link).done(function() 
    { 
     console.log("done"); 
    }); 
+0

爲什麼要在Ajax設置中設置數據? – epascarello 2014-09-26 14:14:24

+0

@epascarello你是完全正確的。我只是從 – grim 2014-09-26 14:29:03