2011-08-29 38 views
25

我只是試圖做這樣一個簡單的要求:阿賈克斯將[對象%20Object]

$('.asd').change(
     function() { 
      $.ajax({ 
       url: 'http://127.0.0.1/folder/index.php/controller/action/integer', 
       success: function(data){} 
      }); 
     } 
    ); 

此代碼試圖去http://127.0.0.1/folder/index.php/controller/[object%20Object]來代替,並得到一個404。它從哪裏拉對象?我正在使用一個簡單的字符串。

+0

什麼內容類型?你的數據在哪裏?這是你完整的ajax請求嗎?粘貼'$ .ajax'的完整代碼 – naveen

+0

嘗試通過AJAX提交時[%5Bobject%20Object%5D(404找不到)]的可能重複(http://stackoverflow.com/questions/10357445/5bobject20object5d-404-not - 當試圖通過ajax提交時發現) –

回答

4

我有同樣的問題,挖遍了尋找答案。不幸的是,這個貢獻者從來沒有回來過。我是一個愚蠢的錯誤。從Ajax返回時,我用一個保留字無意中命名了我的變量。以下是我有:

$.post('/MyApp.php', { param: 'getLocation' }, 
    function(xml) { 
    location=$(xml).find('Location'); 
    } 
}); 

編碼像這樣,在從阿賈克斯返回頁面被重定向到http:// myurl/[對象%20object]現在是非常合情合理的。

解決方案:將「location = $ ...」更改爲「clocation = $ ...」 希望此答案能夠幫助其他人。這是一個艱難的調試。

+2

這裏不相關:用戶沒有定義任何變量。完全是你使用全局變量的錯誤。 – Eric

+2

有點苛刻,考慮戴夫只是把一些東西放在一個相對較舊的問題上。我的問題是URL的構造不正確。這也是OP的問題,可能是通過重定向,或者他無意中遺漏了某些代碼示例。 – Seth

16

對我來說,問題是我使用的是$.post而不是$.ajax

// fails: 
$.post({ 
    url: "/example/" + this.id, 
    // ... 
}); 

// works: 
$.ajax({ 
    url: "/example/" + this.id, 
    // ... 
}); 
+2

是的,但如果你沒有設置類型爲'POST',這是一個http GET –

+4

我只是有一個問題,使用'$ .ajax({type:'POST'...}})'實際上是使用GET - 很奇怪。我轉向使用'$ .post()',並且犯了與上面相同的語法錯誤。對於'$。post()',第一個參數是URL字符串,後跟一個對象 - 與簡寫版本$ .ajax()'的語法略有不同。乾杯。 – gthmb

5

ajax需要參數圖。 post預計單參數:

// fails: 
$.post({ 
    url: "/example/" + this.id, 
    // ... 
}); 

// works: 
$.post("/example/" + this.id); 
1

對於我來說,在遊戲和工作使用jsRoutes這是非常非常痛苦弄清楚。

似乎播放(JavaScript)的會做一個Ajax使用以下語法GET沒有問題:

$.ajax(jsRoutes.controllers.MyController.ajax(inurlparam)) 
.done(function(data) { 
    }).fail(function(data) { 
    }) 

但是(在這裏是討厭的一部分)...如果你希望做一個POST你需要首先在網址上使用absolutURL()方法,以便在發佈時間後讓ajax(或發佈)不要包含[object%20Object]。調試網址或表單參數的數量似乎沒有說明發生了什麼,也沒有說明爲什麼。我只是從絕望的沮喪中毫不誇張地「猜測」了這個解決方案。 PS:請注意absolutURL()末尾的括號 - js人們會立即得到那些意味着「做」的功能,而不僅僅是傳遞給我的句柄。

var url = jsRoutes.controllers.MyController.ajaxPost(inurlparam).absoluteURL(); 
    var formData = $('#form').serialize(); 
    $.ajax({ 
    url: url, 
    type: "POST", 
    data: formData 
    }).done(function(data) { 
    }).fail(function(data) { 
    }) 

我在這裏回答這個問題,因爲這是谷歌在那裏帶領我一次,我終於意識到它可能不是我的編碼是造成問題的:)