2015-08-13 4 views
0

Может быть св продублируйте, но каждая ситуация отличается :)Ошибка внутреннего сервера Ajax 500?

Я получаю строку из Ajax запроса и обработать его с помощью этой функции

function convertHashtags($str){ 

    $text = $str; 
    $regex = '/#(\w+)/'; 
    preg_match_all($regex, $text, $allMatches, PREG_SET_ORDER); 
    foreach ($allMatches as $matches) { 
     $engine->checkHashtag($matches[0]); 
    } 

    $regex2 = "/#+([a-zA-Z0-9_]+)/"; 
    $str = preg_replace($regex2, '<a href="hashtag.php?tag=$1">$0</a>', $str); 
    return($str); 
} 

Тогда я хочу в течение каждого, что для каждого результата Двигателя вставляет его в базу данных. Когда я прокомментирую линию двигателя, то ее работа. return $ matches [0]; тоже работает!

Это моя функция двигателя код

function checkHashtag($tag) { 
    return true; 
} 

И по крайней мере, вот мой Сообщение об ошибке ...

500 (Внутренняя ошибка сервера) отправить

@ Jquery-1.10. 2.js: 8706jQuery.extend.ajax

@ jquery-1.10.2.js: 8136 (анонимная функция)

@ (индекс): 797jQuery.event.dispatch

@ Jquery-1.10.2.js: 5095jQuery.event.add.elemData.handle

@ JQuery-1.10.2.js: 4766

Почему это не работает?

* Что такое $ Engine? *
класса А вошли

require_once('../PATH/engine_class.php'); 
$engine = NEW engine_class(); 
+1

Что такое $ engine, выглядит как объект, но его не создается нигде? Конечно, не входит в объем этой функции – RiggsFolly

+0

$ engine - это класс включен :) Я отредактирую свой вопрос –

+0

Проверьте журналы ошибок сервера, они расскажут вам причину ошибки 500. Скорее всего, это потому, что '$ engine' не входит в объем вашей функции. – Phil

ответ

0

preg_match_all возвращает Int, держа число совпадений. Я отмечаю, что вы не проверяете, были ли 0 совпадений. Ваш код предполагает, что существует хотя бы одно действительное совпадение. Какое значение возвращается из подпрограммы?

+0

Я не вижу такого предположения. Если совпадений нет, код OP просто вернет '$ str' немодифицированный. – Phil

+0

Возможно, мне что-то не хватает, но эта ссылка: http://php.net/manual/en/function.preg-match-all.php имеет следующее примечание: по возвращаемым значениям Возвращает количество совпадений полного шаблона (который может быть равен нулю) или FALSE, если произошла ошибка. –

+0

Да, это правильно, но ОП не предполагает ничего о количестве матчей. Если совпадений нет, тогда '$ allMatches' будет пустым массивом, будут выполняться нулевые итерации' foreach', а 'preg_replace' ничего не изменит. – Phil

Смежные вопросы