2009-08-10 53 views
1

我有一個getJSON調用,這是莫名其妙地失敗。這個想法是,你點擊提交評論,URL被擊中,這決定了評論是好還是壞話。響應以JSON形式給出。getJSON失敗,JSON驗證

下面是生成呼叫的成對的JS。註釋和URL已經在頁面上,它抓住他們,並點擊的網址:

HTML表單:

<fieldset id="mg_comment_fieldset" class="inlineLabels"> 
<div class="ctrlHolder"> 
    <textarea id="id_comment" rows="10" cols="40" name="comment"></textarea> 
</div> 
<div class="form_block"> 
    <input type="hidden" name="next" value="" /> 
    <input id="mg_comment_url" type="hidden" name="comment_url" value="" /> 

    <input id="mg_comment_submit" type="submit" value="Remark" /> 
</div> 
</fieldset> 

具體JS BLOCK發送/ READS迴應:

$('input#mg_comment_submit').click(function(){ 
var comment = $("textarea#id_comment").val(); 
var comment_url = $('input#mg_comment_url').val(); 
$.getJSON(
    comment_url+"?callback=?&comment="+comment+"&next=", 
    function(data){ 
     console.log(data); 
     alert(data); 
    });   
}); 

的JSON響應:

[{"errors": {"comment": ["Weve detected that your submission contains words which violate our Terms and Conditions. Please remove them and resubmit test"]}}] 

它作爲application/json的mimetype被返回。它在JSONLint中進行驗證。我也嘗試添加一對AJAX函數來嘗試捕獲錯誤,並且它們都是沉默的。我可以在Firebug中看到請求,然後返回狀態爲200的響應,這些響應在JSONLint中進行了驗證,並且我可以在響應的JSON選項卡中正確處理。如果我在getJSON之前放置一個警報,它會運行;它只是它內部沒有運行。我還發現,如果我將.getJSON更改爲.get,則警報確實會運行,表明它與JSON有關。我對這個問題可能會有什麼想法。使用Firefox 3.0.13。

+0

請保持你的URIs冪等。即使是阿賈克斯人。這應該使用'$ .post'。當你不這樣做時,它實際上違反了HTTP規範http://www.w3.org/2001/tag/doc/whenToUseGet.html#safe – 2009-08-10 21:42:21

回答

3

的查詢字符串參數「callback=?」進場時,如果你使用的是跨站點腳本或JSONP,如果您發佈相同的服務器,你並不需要使用。

如果您需要或想要使用該選項,服務器端代碼需要返回json響應中包含的回調函數。

實施例:

$jsonData = getDataAsJson($_GET['symbol']); 
echo $_GET['callback'] . '(' . $jsonData . ');'; 
// prints: jsonp1232617941775({"symbol" : "IBM", "price" : "91.42"}); 

因此,無論使服務器側改變如果必要或簡單remove從URL中的 「callback=?」 參數。

這裏的more info on jsonp

+0

這可能已經完成了...只是做了一個快速測試,並得到回報。商店正在關閉,所以我明天會更加努力,並在我解答​​之前嘗試驗證。 – KRH 2009-08-10 22:14:18

+0

是的,這樣做,雖然有其他調用使用回調,並沒有失敗......不知道爲什麼這一個。 Django正在產生響應。無論哪種方式,該腳本不需要跨域,所以我將其標記爲已回答。謝謝! – KRH 2009-08-11 14:53:33

1

您是否可以手動調用您的服務而不出現任何錯誤?您是否嘗試過使用Firebug並在XBR下查看JSON負載的發佈/響應?我通常使用.NET作爲我的端點,而在.NET 3.5中,我需要使用內容類型「application/json; charset = utf-8」。

這裏是一個工作JSON調用我在.NET中使用與jQuery 1.3.2

$.ajax({ 
    type: "POST", 
    url: "WebService1.ASMX/HelloWorld", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    data: "{}", 
    success: function(res) { 
    // Do your work here. 
    // Remember, the results for a ASMX Web Service are wrapped 
    // within the object "d" by default. e.g. {"d" : "Hello World"} 
    } 
}); 
0

你有沒有用$就嘗試過的例子嗎?然後,您可以定義錯誤和成功回調,並有更好的主意。

0

您可以嘗試添加全局ajaxError函數來記錄錯誤。

$.ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError){ 
    console.log(thrownError); 
}); 
+0

試過這個,不幸的是沒有拋出任何錯誤。 – KRH 2009-08-10 22:12:18

+0

這些x域名網址? – redsquare 2009-08-10 22:18:11