连字符不允许jQuery AJAX调用正常工作

时间:2015-10-05 18:31:08

标签: javascript php jquery ajax get

问题:通过我的addData()函数传递的参数中有一个连字符;想想“12345678-9”。每当传递的数据都有连字符时,我的应用程序上会弹出Ajax Fail!警告框。但是,每当我将$_GET变量硬编码为没有连字符的字符串或数字时,我的应用程序的这部分就可以工作了。我已经将它缩小到连字符导致此错误的可能事实。请参阅下面的代码。

HTML

<button id="add-analysis-button" onClick="addData( $( '#click-number' ).text() )">Add Data</button>

的Javascript / jQuery的/ AJAX

function addData(a_ship) {
$.ajax({
    type: 'GET',
    url: 'models/add-data.php?oShip=' + a_ship,
    mimeType: 'json',
    success: function(data) {
        alert( data );
    },
    error: function() {
        alert('Ajax Fail!');
    }
});

PHP(文件:add-data.php)

<?php
echo $_GET['oShip'];

我尝试了什么:我尝试在addData()函数中使用javascript的替换函数来替换带有HTML编号的连字符。例如:a_ship = a_ship.replace('-', '&#45;')。这似乎允许代码部分工作,但然后删除连字符后的数字,这导致我进入另一个问题。

问题:如何在不引起错误的情况下将连字符传递给jQuery的AJAX?

2 个答案:

答案 0 :(得分:2)

改变这个:

mimeType: 'json',

到此:

contentType: 'json',

-Or -

完全删除mimeType将解决此问题。

答案 1 :(得分:1)

用此替换您的代码并回复结果(可编辑的小提琴:http://jsfiddle.net/caLu0kj9/)。请注意,在ajax请求中添加dataType并删除HTML代码中的onclick事件。

HTML:

<div id="click-number">12345678-9</div>
<button id="add-analysis-button">Add Data</button>

JavaScript的:

$("#add-analysis-button").click(function(){
    addData($( '#click-number').text());
});

function addData(a_ship) {
    $.ajax({
        type: 'GET',
        url: 'models/add-data.php?oShip=' + encodeURIComponent(a_ship),
        dataType: 'json',
        beforeSend: function(jqXHR, settings) {
            jqXHR.url = settings.url;
        },
        success: function(jqXHR, data) {
            alert("SUCCESS! " + data + " " + jqXHR.url);
        },
        error: function(jqXHR) {
            alert("FAIL! " + jqXHR.url);
        }
    });
}